【PHP8.x】RangeException::getMessage()メソッドの使い方
getMessageメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getMessageメソッドは、RangeExceptionオブジェクトに設定された例外メッセージを取得するために実行するメソッドです。このメソッドは、PHPの基本的な例外クラスであるExceptionクラスから継承されているため、RangeExceptionだけでなく、他の多くの例外クラスでも共通して利用できます。プログラムの実行中に、ある値が期待される有効範囲を超えた場合などにRangeExceptionがスローされます。このスローされた例外をtry...catch構文で捕捉した際に、getMessageメソッドを呼び出すことで、その例外がなぜ発生したのかを示す具体的なエラーメッセージを文字列として取得することが可能です。返される文字列は、通常、new RangeException("メッセージ")のように例外オブジェクトを生成する際のコンストラクタに渡されたものです。この機能により、開発者はエラーの原因を正確に把握し、デバッグ作業を効率的に進めたり、エラーログに詳細な情報を記録したりすることができるため、堅牢なエラーハンドリングを実装する上で非常に重要な役割を果たします。
構文(syntax)
1<?php 2try { 3 // 有効範囲外の値で例外を意図的に発生させる 4 throw new RangeException("指定された値は範囲外です。"); 5} catch (RangeException $e) { 6 // catchした例外オブジェクトからエラーメッセージを取得する 7 $message = $e->getMessage(); 8 echo $message; 9} 10?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
string
このメソッドは、例外が発生した原因を示すメッセージ文字列を返します。
サンプルコード
PHP RangeException の getMessage() でエラーメッセージを取得する
1<?php 2 3/** 4 * 指定された値が有効な範囲内にあるかチェックします。 5 * 範囲外の場合、RangeExceptionをスローします。 6 * 7 * @param int $value チェックする値 8 * @param int $min 許容される最小値 9 * @param int $max 許容される最大値 10 * @return void 11 * @throws RangeException 値が指定された範囲外の場合 12 */ 13function checkValueInRange(int $value, int $min, int $max): void 14{ 15 if ($value < $min || $value > $max) { 16 // 値が範囲外の場合、具体的なエラーメッセージを持つRangeExceptionをスローする 17 throw new RangeException("値 {$value} は、範囲 {$min}~{$max} の中にありません。"); 18 } 19} 20 21// テスト用の値 22$testValue = 150; 23 24try { 25 // 0から100の範囲で値をチェックする 26 echo "値 {$testValue} を 0~100 の範囲でチェックします..." . PHP_EOL; 27 checkValueInRange($testValue, 0, 100); 28 echo "値 {$testValue} は有効な範囲内です。" . PHP_EOL; 29} catch (RangeException $e) { 30 // RangeExceptionがスローされた場合に、ここで捕捉する 31 // $e->getMessage() メソッドで、例外オブジェクトに設定されたエラーメッセージ文字列を取得して表示する 32 echo "エラー: " . $e->getMessage() . PHP_EOL; 33}
$e->getMessage()は、Exceptionクラスから継承されるメソッドで、例外オブジェクトに設定されたエラーメッセージを取得します。このメソッドに引数はなく、戻り値としてエラーメッセージの文字列(string)を返します。
サンプルコードでは、まずcheckValueInRange関数が、引数で受け取った値が指定された範囲内にあるかを確認します。範囲外だった場合、new RangeException("...")で、エラーの具体的な状況を説明するメッセージを持つRangeExceptionオブジェクトを生成し、throwキーワードで例外を発生させます。
tryブロック内でこの関数を呼び出し、例外が発生すると、処理は直ちにcatchブロックへ移ります。ここで、発生した例外オブジェクトは変数$eに捕捉されます。そして、$e->getMessage()を実行することで、例外オブジェクトが生成された際にコンストラクタに渡された「値 150 は、範囲 0~100 の中にありません。」というエラーメッセージ文字列を取得し、画面に出力しています。このように、getMessage()はエラーの原因を特定する上で重要な役割を果たします。
$e->getMessage()は、throw new RangeException()のように例外を発生させる際に指定した、エラーメッセージ文字列を取得するメソッドです。tryブロック内の処理で例外が発生すると、プログラムは直ちにcatchブロックの処理へ移ります。もしcatchで例外を捕捉しない場合、プログラムはエラーで停止してしまいます。そのため、例外が発生する可能性のある処理はtry...catchで囲むことが重要です。また、catchではRangeExceptionのように、捕捉したい例外のクラスを正確に指定する必要があります。これにより、エラーの種類に応じた適切な処理を記述できます。エラーメッセージは開発者が設定するため、問題の原因が利用者に伝わるよう、具体的で分かりやすい内容にすることが大切です。
PHP RangeException getMessageでエラーメッセージを取得する
1<?php 2 3/** 4 * 指定された年齢が有効な範囲(0〜150)にあるか検証する関数。 5 * 6 * @param int $age 検証する年齢 7 * @return void 8 * @throws RangeException 年齢が有効な範囲外の場合 9 */ 10function validateAge(int $age): void 11{ 12 // 年齢が0未満または150より大きい場合は、範囲外とみなす 13 if ($age < 0 || $age > 150) { 14 // RangeExceptionをスローする。コンストラクタに渡した文字列がエラーメッセージとなる。 15 throw new RangeException("年齢の値が不正です。0から150の間で指定してください。"); 16 } 17} 18 19try { 20 // わざと範囲外の値を渡し、例外を発生させる 21 echo "年齢を検証します: 200\n"; 22 validateAge(200); 23 24 // 例外がスローされるため、この行は実行されない 25 echo "年齢は有効です。\n"; 26} catch (RangeException $e) { 27 // スローされたRangeExceptionをキャッチする 28 // getMessage()メソッドで、例外オブジェクトに格納されたエラーメッセージを取得する 29 $errorMessage = $e->getMessage(); 30 31 // 取得したエラーメッセージを表示する 32 echo "エラー: " . $errorMessage . "\n"; 33}
RangeException::getMessage()は、RangeExceptionオブジェクトに格納されているエラーメッセージを取得するためのメソッドです。このメソッドは引数を取らず、戻り値としてエラーメッセージの文字列を返します。
サンプルコードでは、まずvalidateAge関数で引数の年齢が0から150の範囲内にあるかを検証しています。年齢が範囲外の場合、throw new RangeException()で例外を発生させます。このとき、コンストラクタに渡された「年齢の値が不正です。0から150の間で指定してください。」という文字列が、エラーメッセージとして例外オブジェクトに設定されます。
tryブロック内で、意図的に範囲外の値である200をvalidateAge関数に渡すことで、このRangeExceptionを発生させています。発生した例外はcatchブロックで捕捉され、その例外オブジェクトが変数$eに代入されます。
catchブロック内で$e->getMessage()を呼び出すと、例外がthrowされたときに設定されたエラーメッセージの文字列を取得できます。このサンプルでは、取得したメッセージを画面に出力することで、どのようなエラーが発生したかをユーザーに伝えています。
getMessage()メソッドは、例外が生成される際にnew RangeException("...")の形で開発者が指定したエラーメッセージ文字列を取得するためのものです。PHPが自動で文言を生成するわけではない点に注意してください。tryブロック内で例外が発生すると、それ以降の処理は中断され、直ちにcatchブロックが実行されます。このため、サンプルコードの「年齢は有効です。」というメッセージは表示されません。取得したエラーメッセージは、デバッグ時のログ記録や、利用者にエラー内容を通知する目的で使いますが、システムの詳細な内部情報などが含まれないように配慮することが安全なプログラム作成につながります。