【PHP8.x】LogicException::getCode()メソッドの使い方
getCodeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getCodeメソッドは、スローされたLogicExceptionオブジェクトに設定されている例外コードを取得するために実行するメソッドです。このメソッドは、PHPの全ての例外クラスの基底クラスであるExceptionクラスで定義されており、LogicExceptionもこれを継承しているため利用することが可能です。例外コードとは、発生したエラーの種類をプログラムが機械的に識別するために使用される整数値です。これは人間が可読なエラーメッセージとは異なり、switch文などを用いてエラー処理を分岐させる際に役立ちます。LogicExceptionオブジェクトが生成される際、コンストラクタの第2引数として任意の整数値をエラーコードとして渡すことができ、getCodeメソッドはその値を返します。もしコードが指定されずに例外がスローされた場合は、デフォルト値として0が返されます。try-catch構文を用いて例外を捕捉した際にこのメソッドを呼び出すことで、特定のエラーコードに基づいたログ出力や、ユーザーへの通知内容の変更など、エラーの種類に応じた具体的な処理を実装できます。これにより、より柔軟で詳細なエラーハンドリングを実現することが可能になります。
構文(syntax)
1<?php 2 3try { 4 throw new LogicException('ロジックエラーが発生しました。', 101); 5} catch (LogicException $e) { 6 $errorCode = $e->getCode(); 7 echo $errorCode; 8} 9 10?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int|string
LogicException クラスの getCode メソッドは、例外が発生した際のカスタムエラーコードを返します。このコードは整数または文字列のいずれかです。
サンプルコード
PHP LogicExceptionのコードを取得する
1<?php 2 3/** 4 * ユーザーIDを検証し、ロジックに問題があれば例外をスローする関数 5 * 6 * @param mixed $userId 検証対象のユーザーID 7 * @return void 8 * @throws LogicException ユーザーIDが不正な場合にスローされる 9 */ 10function processUserId(mixed $userId): void 11{ 12 // is_int() で整数かどうかをチェック 13 if (!is_int($userId)) { 14 // IDが整数でないというロジックエラー。エラーコード 1001 を設定。 15 throw new LogicException('ユーザーIDは整数である必要があります。', 1001); 16 } 17 18 // IDが正の数であるかをチェック 19 if ($userId <= 0) { 20 // IDが正の数でないというロジックエラー。エラーコード 1002 を設定。 21 throw new LogicException('ユーザーIDは正の整数である必要があります。', 1002); 22 } 23 24 echo "ユーザーID '{$userId}' は正常です。\n"; 25} 26 27// --- メイン処理 --- 28 29// 検証するデータのリスト 30$testData = [10, -5, 'user_abc', 20]; 31 32foreach ($testData as $data) { 33 try { 34 // 例外が発生する可能性のあるコードをtryブロックで囲む 35 echo "データ '{$data}' の処理を開始します...\n"; 36 processUserId($data); 37 } catch (LogicException $e) { 38 // LogicExceptionがスローされた場合に、このcatchブロックで捕捉する 39 echo "[エラー発生]\n"; 40 // getMessage()で例外メッセージを取得 41 echo " メッセージ: " . $e->getMessage() . "\n"; 42 43 // getCode()で、例外に設定されたエラーコードを取得する 44 // このコードによって、エラーの種類をプログラムで判別できる 45 $errorCode = $e->getCode(); 46 echo " エラーコード: " . $errorCode . "\n"; 47 } finally { 48 // tryまたはcatchの処理が終わった後に必ず実行される 49 echo "処理を終了します。\n\n"; 50 } 51}
PHPのLogicException::getCode()メソッドは、プログラムの論理的な誤りによって発生した例外から、エラーの種類を識別するための「例外コード」を取得する際に使用します。
このメソッドは引数を必要としません。戻り値として、例外が生成される際に第2引数で指定された整数(int)または文字列(string)のコードを返します。通常、エラーの種類をプログラムで判別しやすいように、一意の整数が設定されます。
サンプルコードでは、processUserId関数内でユーザーIDの形式が不正な場合に、1001や1002といったエラーコードを指定してLogicExceptionをスローしています。try...catchブロックでこの例外を捕捉した後、$e->getCode()を呼び出すことで、この設定されたコードを取得しています。この機能により、エラーメッセージの文字列に頼ることなく、コードの値に基づいてエラーの種類を正確に特定し、それぞれのケースに応じた適切な処理を実装できます。
getCode()メソッドは、例外発生時に設定されたエラーコードを取得します。例外をthrowする際、new LogicException('メッセージ', 1001)のように第二引数でコードを指定します。このコードを指定しない場合、getCode()の戻り値はデフォルトで0になりますので注意が必要です。エラーコードを使うことで、エラーメッセージの文字列に依存せず、プログラムでエラーの種類を正確に識別し、switch文などでコードに応じた処理を分岐させることが可能になります。なお、LogicExceptionはプログラムの論理的な誤りを示すための例外です。ユーザーの不正な入力といった実行時に起こりうるエラーとは区別して使うことが推奨されます。PHP 8から戻り値は整数または文字列に対応していますが、一般的には整数を使用します。
PHP LogicException getCode()でエラーコードを取得する
1<?php 2 3/** 4 * LogicException と getCode() の使用例を示す関数。 5 * 6 * この関数は、意図的にロジックエラーを発生させ、 7 * try-catch ブロックで捕捉し、エラーコードを取得して表示します。 8 */ 9function demonstrateGetCode(): void 10{ 11 try { 12 // プログラムのロジックとして、値が負になることは想定外とします。 13 $value = -1; 14 15 if ($value < 0) { 16 // ロジックに反する状態になったため、LogicExceptionをスローします。 17 // 第2引数には、エラーを識別するための任意のコード(int|string)を指定できます。 18 $errorCode = 1001; 19 throw new LogicException('値が負になっています。', $errorCode); 20 } 21 22 // この行は例外がスローされるため実行されません。 23 echo "処理は正常に完了しました。\n"; 24 25 } catch (LogicException $e) { 26 // スローされたLogicExceptionをここでキャッチします。 27 28 echo "ロジックエラーをキャッチしました。\n"; 29 30 // getCode() メソッドを使い、例外オブジェクトに設定されたエラーコードを取得します。 31 $retrievedCode = $e->getCode(); 32 33 // 取得したエラーコードとメッセージを表示します。 34 echo "エラーコード: " . $retrievedCode . "\n"; 35 echo "メッセージ: " . $e->getMessage() . "\n"; 36 } 37} 38 39// 関数を実行します。 40demonstrateGetCode();
LogicExceptionクラスのgetCode()メソッドは、例外オブジェクトに設定されたエラーコードを取得するために使用します。このメソッドに引数はなく、戻り値として、例外が生成された際に指定された整数(int)または文字列(string)のエラーコードを返します。
サンプルコードでは、まずtryブロック内で意図的にロジックエラーを発生させています。プログラムの仕様上、値が負になることは想定外であるため、if文で値が負であることを検知します。そしてthrow new LogicException()を用いて例外を発生させます。このとき、コンストラクタの第2引数に、エラーを識別するためのコードとして1001を指定しています。
次に、catchブロックでスローされたLogicExceptionを捕捉します。捕捉した例外オブジェクト(変数$e)に対して$e->getCode()を呼び出すことで、先ほど設定したエラーコード1001が取得できます。このようにgetCode()を使うことで、エラーメッセージの内容に頼らず、コードによってエラーの種類を正確に識別し、その後の処理を分岐させることが可能になります。
getCode()メソッドは、例外を生成する際に第2引数で指定したエラーコードを取得します。この引数を省略した場合、デフォルト値として0が返される点に注意が必要です。エラーコードを用いると、エラーメッセージの文字列に頼らずにエラーの種類を機械的に判別し、その後の処理を分岐させることができます。なお、LogicExceptionはプログラムの設計上の誤り、つまり修正すべきバグを示すための例外です。ユーザーの入力ミスなど実行時に起こりうるエラーにはRuntimeExceptionなどを使い分けるのが一般的です。プロジェクト内でエラーコードの体系を統一しておくと、エラーハンドリングがしやすくなり、保守性の向上につながります。