【PHP8.x】BadFunctionCallException::getCode()メソッドの使い方
getCodeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getCodeメソッドは、スローされたBadFunctionCallExceptionに設定された例外コードを取得するために使用されるメソッドです。このメソッドは、PHPのすべての例外クラスの基底となるExceptionクラスで定義されており、BadFunctionCallExceptionクラスはこれを継承して利用します。例外コードとは、例外が発生した際に、そのエラーの種類を数値で区別するために開発者が任意で設定できる整数値です。try...catchブロックでBadFunctionCallExceptionを捕捉した際に、このメソッドを呼び出すことで、例外オブジェクトに格納されているコードを取得できます。例外がスローされる際にコードが明示的に指定されていない場合、デフォルトで0が返されます。BadFunctionCallExceptionは、存在しない関数を呼び出そうとした場合や、関数に渡す引数が不足している場合など、関数呼び出しに問題がある場合に発生します。PHPエンジンが内部的にこの例外をスローする場合、例外コードは通常0となりますが、開発者が意図的に特定のコードを設定してスローすることも可能です。このメソッドを使うことで、エラー処理の分岐をより詳細に制御することができます。
構文(syntax)
1<?php 2 3try { 4 // 例として、例外コードを101としてBadFunctionCallExceptionをスローします 5 throw new BadFunctionCallException('This is a bad function call.', 101); 6} catch (BadFunctionCallException $e) { 7 // getCode()メソッドを使って、設定された例外コードを取得します 8 $exceptionCode = $e->getCode(); 9 var_dump($exceptionCode); // int(101) 10}
引数(parameters)
引数なし
引数はありません
戻り値(return)
mixed
このメソッドは、例外が発生した原因となったコードを表す整数値を返します。
サンプルコード
BadFunctionCallExceptionからgetCode()でエラーコードを取得する
1<?php 2 3/** 4 * BadFunctionCallExceptionからエラーコードを取得するサンプル関数 5 * 6 * この関数は、意図的にBadFunctionCallExceptionをスローし、 7 * catchブロックでその例外オブジェクトからgetCode()メソッドを使って 8 * エラーコードを取得して表示します。 9 */ 10function demonstrateGetCodeFromBadFunctionCallException(): void 11{ 12 try { 13 // 例: 何らかのロジックで不正な関数呼び出しが検出されたとする 14 // ここではデモンストレーションのために、特定のエラーコードを持つ例外を意図的にスローします 15 $errorCode = 5001; 16 throw new BadFunctionCallException('要求されたコールバック関数が見つかりません。', $errorCode); 17 } catch (BadFunctionCallException $e) { 18 // スローされた例外をキャッチします 19 echo "例外がキャッチされました。\n"; 20 21 // getMessage() で例外メッセージを取得します 22 echo 'メッセージ: ' . $e->getMessage() . "\n"; 23 24 // getCode() で設定されたエラーコードを取得します 25 // このコードは、例外がスローされた際に第二引数で指定された値です 26 $retrievedCode = $e->getCode(); 27 echo 'エラーコード: ' . $retrievedCode . "\n"; 28 } 29} 30 31// 関数を実行します 32demonstrateGetCodeFromBadFunctionCallException();
BadFunctionCallExceptionクラスのgetCode()メソッドは、発生した例外に設定された「エラーコード」を取得するためのものです。エラーコードは、エラーの種類をプログラムが識別できるようにするための数値です。
このサンプルコードでは、まずtryブロックの中で意図的にBadFunctionCallExceptionという種類の例外を発生させています。new BadFunctionCallException()の第二引数に指定された値(この例では5001)が、この例外のエラーコードとして内部に保存されます。
次にcatchブロックで、発生した例外を$eという変数で受け取ります。そして$e->getCode()を呼び出すことで、先ほど設定されたエラーコード5001が取得できます。取得したコードは変数$retrievedCodeに代入され、画面に出力されます。
このメソッドは呼び出し時に引数を必要としません。戻り値として、例外が作られたときに設定されたエラーコードを返します。この機能により、特定のエラーコードを持つ例外が発生した場合にのみ特別な処理を行うといった、詳細なエラーハンドリングを実装できます。
getCode()メソッドは、例外オブジェクトに設定されたエラーコードを取得します。このエラーコードは、throw new BadFunctionCallException('メッセージ', 5001)のように、例外を生成する際の第2引数で指定した値です。もし第2引数を省略して例外をスローした場合、getCode()はデフォルトで整数の0を返します。エラーコードを使うことで、同じ種類の例外でも発生原因を細かく識別でき、コードに応じた適切な処理を実装するのに役立ちます。BadFunctionCallExceptionはPHPエンジンが内部的にスローすることが多いですが、サンプルコードのように意図的に生成することも可能です。このメソッドは必ずtry-catch構文のcatchブロック内で、捕捉した例外オブジェクトに対して使用してください。
PHP Exception getCode でエラーコードを取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * 指定されたコールバックを実行しようと試みます。 7 * 8 * この関数は、引数が有効なコールバック(呼び出し可能な関数やメソッド)でない場合に、 9 * カスタムエラーコードを付けて BadFunctionCallException をスローします。 10 * 11 * @param mixed $callback 実行を試みるコールバック 12 * @throws BadFunctionCallException コールバックが無効な場合にスローされる 13 */ 14function attemptToExecuteCallback(mixed $callback): void 15{ 16 // is_callable() は、変数が関数として呼び出し可能かを確認します。 17 if (!is_callable($callback)) { 18 // 呼び出し不可能な場合、エラーメッセージとエラーコード(1001)を指定して例外をスローします。 19 // このエラーコードが、後に getCode() メソッドで取得されます。 20 throw new BadFunctionCallException( 21 '指定されたコールバックは呼び出し不可能です。', 22 1001 23 ); 24 } 25 26 // 呼び出し可能な場合は、そのコールバックを実行します。 27 echo "コールバックの実行に成功しました。\n"; 28 call_user_func($callback); 29} 30 31// try-catch ブロックを使って、例外が発生する可能性のある処理を実行します。 32try { 33 // 存在しない関数名を渡し、意図的に BadFunctionCallException を発生させます。 34 echo "存在しない関数を呼び出そうとします...\n"; 35 attemptToExecuteCallback('non_existent_function'); 36} catch (BadFunctionCallException $e) { 37 // catch ブロックで、スローされた BadFunctionCallException を捕捉します。 38 // $e は例外オブジェクトのインスタンスです。 39 40 echo "エラーが発生しました。\n"; 41 42 // getCode() メソッドを使い、例外に設定されたエラーコードを取得して表示します。 43 // この例では、throw new で指定した `1001` が出力されます。 44 echo '例外コード: ' . $e->getCode() . PHP_EOL; 45 46 // getMessage() メソッドで、例外のエラーメッセージも取得できます。 47 echo 'メッセージ: ' . $e->getMessage() . PHP_EOL; 48} 49
BadFunctionCallExceptionクラスのgetCode()メソッドは、例外オブジェクトに設定されたエラーコードを取得するために使用されます。BadFunctionCallExceptionは、無効な関数やメソッドを呼び出そうとした際に発生する例外の一つです。
このサンプルコードでは、まずattemptToExecuteCallbackという関数を定義しています。この関数は、引数で渡された値が関数として呼び出し可能かどうかをis_callable()で判定します。もし呼び出し不可能な場合は、エラーメッセージとエラーコード1001を指定してBadFunctionCallExceptionをスロー(発生)させます。
次に、try-catchブロックでこの関数を実行します。tryブロック内で、意図的に存在しない関数名'non_existent_function'を渡すことで、例外を発生させています。発生した例外はcatchブロックで捕捉されます。
catchブロック内では、捕捉した例外オブジェクト$eのgetCode()メソッドを呼び出しています。このメソッドは引数を取らず、例外がスローされた際に設定されたエラーコードを戻り値として返します。この例では、throw時に指定された1001が取得され、画面に出力されます。このように、getCode()を使うことで、どのような種類のエラーが発生したのかをプログラムで識別することが可能になります。
getCode()メソッドは、例外に設定されたエラーコードを取得するためのものです。これはエラーメッセージを取得するgetMessage()とは役割が異なります。このエラーコードは、throw new BadFunctionCallException('メッセージ', 1001)のように、例外を発生させる際の第2引数で指定します。もしこの引数を省略した場合、getCode()が返す値は0になります。取得したエラーコードを利用することで、特定のエラーの種類を判別し、コードに応じた処理を分岐させることが可能になります。これにより、より詳細で的確なエラーハンドリングが実現できます。コードには通常整数が使われますが、整数で統一して管理することが推奨されます。