【PHP8.x】RangeException::getCode()メソッドの使い方
getCodeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getCodeメソッドは、スローされた例外に設定されている例外コードを取得するメソッドです。このメソッドはRangeExceptionクラスに固有のものではなく、すべての例外クラスの基底となるExceptionクラスから継承されています。例外コードは、例外の種類をプログラムで識別するために使用される整数値で、通常は例外オブジェクトが生成される際にコンストラクタの第二引数として設定されます。try...catchブロックでRangeExceptionオブジェクトを捕捉した際に、このメソッドを呼び出すことで、設定された整数コードを取得できます。取得したコードの値に応じてエラー処理を分岐させるなど、より詳細で柔軟な例外ハンドリングを実装することが可能になります。もし例外が生成される際にコードが明示的に指定されなかった場合、このメソッドはデフォルト値として0を返します。戻り値は整数型(int)です。
構文(syntax)
1<?php 2 3try { 4 // 例外コード 100 を持つ RangeException をスローします。 5 throw new RangeException("値が範囲外です。", 100); 6} catch (RangeException $e) { 7 // 捕捉した例外のコードを取得して出力します。 8 echo $e->getCode(); // 100 9}
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
このメソッドは、例外が発生した際のコード番号を整数型で返します。
サンプルコード
RangeException::getCode()でエラーコードを取得する
1<?php 2 3/** 4 * 指定された年齢が有効な範囲内にあるか検証します。 5 * 6 * @param int $age 検証する年齢 7 * @return void 8 * @throws RangeException 年齢が有効な範囲外の場合 9 */ 10function validateAge(int $age): void 11{ 12 // 年齢が0未満の場合、エラーコード1001で例外をスロー 13 if ($age < 0) { 14 throw new RangeException("年齢は0以上でなければなりません。", 1001); 15 } 16 17 // 年齢が120を超える場合、エラーコード1002で例外をスロー 18 if ($age > 120) { 19 throw new RangeException("年齢が人間として想定される範囲を超えています。", 1002); 20 } 21 22 echo "{$age}歳は有効な年齢です。" . PHP_EOL; 23} 24 25try { 26 // 正常なケース 27 validateAge(30); 28 29 // 例外が発生するケース 30 validateAge(150); 31} catch (RangeException $e) { 32 // catchブロックで例外を捕捉します。 33 echo "エラーメッセージ: " . $e->getMessage() . PHP_EOL; 34 35 // getCode() メソッドで、例外に設定されたエラーコードを取得します。 36 $errorCode = $e->getCode(); 37 echo "エラーコード: " . $errorCode . PHP_EOL; 38 39 // エラーコードに基づいて処理を分岐することも可能です。 40 switch ($errorCode) { 41 case 1001: 42 echo "ステータス: 年齢が負の値です。" . PHP_EOL; 43 break; 44 case 1002: 45 echo "ステータス: 年齢が上限を超えています。" . PHP_EOL; 46 break; 47 default: 48 echo "ステータス: 不明な範囲エラーです。" . PHP_EOL; 49 break; 50 } 51} finally { 52 echo "検証処理を終了します。" . PHP_EOL; 53}
このサンプルコードは、PHPの例外処理において、RangeExceptionクラスのgetCode()メソッドを使い、エラーコードを取得する方法を示しています。
validateAge関数は、引数で受け取った年齢が0歳から120歳の範囲内にあるかを検証します。年齢が範囲外の場合、throwキーワードを使ってRangeExceptionを意図的に発生させます。その際、第1引数にエラーメッセージ、第2引数にエラーの種類を識別するための数値(エラーコード)を設定しています。
tryブロック内で実行された処理でRangeExceptionが発生すると、catchブロックで例外が捕捉されます。捕捉した例外オブジェクト(変数$e)に対してgetCode()メソッドを呼び出すと、例外発生時に設定されたエラーコードを整数(int)として取得できます。このメソッドは引数を必要としません。
このコードでは、getCode()で取得したエラーコードの値に基づき、switch文で処理を分岐させています。このように、エラーコードを利用することで、同じ種類の例外であっても原因に応じた具体的なエラーハンドリングを実装することが可能になります。
getCode()メソッドは、例外が発生した際に設定されたエラーコードを取得するために使います。このエラーコードは、throw new RangeException("メッセージ", 1002)のように、例外を生成する際の第2引数で指定した整数値です。この第2引数を省略した場合、getCode()の戻り値は0になるため注意してください。エラーメッセージの文字列で処理を分岐させるよりも、このエラーコードという数値で判断する方が、より確実で間違いが少なくなります。どのようなエラーにどのコードを割り当てるかをあらかじめ決めておくことで、コードの保守性が高まります。
PHP RangeException getCode() でエラーコードを取得する
1<?php 2 3/** 4 * 年齢を検証し、範囲外の場合はRangeExceptionをスローする関数 5 * 6 * @param int $age 検証する年齢 7 * @return void 8 * @throws RangeException 年齢が0未満または120より大きい場合 9 */ 10function validateAge(int $age): void 11{ 12 // 年齢が有効な範囲(0〜120)にあるかチェック 13 if ($age < 0 || $age > 120) { 14 // 範囲外の場合、エラーメッセージとエラーコードを指定して例外をスロー 15 throw new RangeException( 16 message: "年齢は0歳から120歳の間でなければなりません。", 17 code: 1001 // エラーコード 18 ); 19 } 20} 21 22try { 23 // 無効な年齢で関数を呼び出し、意図的に例外を発生させる 24 $age = 150; 25 echo "年齢 {$age}歳 を検証します...\n"; 26 validateAge($age); 27 echo "年齢は有効です。\n"; 28} catch (RangeException $e) { 29 // RangeExceptionを捕捉する 30 echo "エラーが発生しました。\n"; 31 32 // getCode()メソッドで例外に設定されたエラーコードを取得して表示 33 // このコードは、例外の種類をプログラムで識別するために使用できます。 34 echo "エラーコード: " . $e->getCode() . "\n"; 35 36 // getMessage()メソッドでエラーメッセージを取得して表示 37 echo "メッセージ: " . $e->getMessage() . "\n"; 38} 39 40?>
RangeExceptionクラスのgetCode()メソッドは、例外オブジェクトに設定された整数型の「エラーコード」を取得するために使用されます。このメソッドに引数はなく、戻り値として例外生成時に指定された整数(int)のエラーコードが返されます。
サンプルコードでは、まずvalidateAge関数が年齢を検証します。年齢が0歳から120歳の範囲外の場合、エラーメッセージとエラーコード1001を持つRangeExceptionをthrow(スロー)します。
tryブロック内で、範囲外の値である150をvalidateAge関数に渡すことで、意図的にこの例外を発生させます。発生した例外はcatchブロックで捕捉され、その情報が$eという変数に格納されます。
catchブロック内では、$e->getCode()を呼び出すことで、例外に設定されていたエラーコード1001を取得し、画面に表示しています。このようにgetCode()で取得できるエラーコードは、エラーメッセージの内容に依存せず、プログラムがエラーの種類を正確に識別したい場合に役立ちます。
getCode()メソッドは、例外発生時に設定された整数値(エラーコード)を取得します。このエラーコードは、throw new RangeException(...)のcode引数で開発者が独自に設定した値であり、設定を省略した場合は基本的に0が返されます。このコードの主な目的は、catchブロック内でエラーの種類をプログラム的に識別することです。例えば、取得したコードの値に応じてswitch文などで処理を分岐させ、同じ例外クラスでも原因ごとに異なる対応が可能になります。ユーザーに表示するエラーメッセージとは別に、プログラムの内部的なエラー処理を制御するために活用してください。