【PHP8.x】BadMethodCallException::getCode()メソッドの使い方
getCodeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getCodeメソッドは、スローされた例外に設定されている例外コードを取得するメソッドです。このメソッドは、PHPの基本的な例外クラスであるExceptionクラスで定義されており、BadMethodCallExceptionクラスはそれを継承しているため利用できます。例外コードとは、例外の種類をプログラムが識別するために使われる整数値で、例外を生成する際に開発者が意図的に設定することが可能です。BadMethodCallExceptionは、存在しないメソッドや、privateメソッドのようにアクセス権のないメソッドが呼び出された場合に発生します。この例外をtry...catchブロックで捕捉した際に、getCodeメソッドを呼び出すことで、設定された例外コードを取得できます。取得したコードの値に応じて、エラーログのレベルを変更したり、ユーザーへの通知方法を変えたりするなど、エラー処理を細かく制御するために役立ちます。もし例外がスローされた際にコードが明示的に設定されていなければ、このメソッドは親クラスのデフォルト値である0を返します。
構文(syntax)
1final public getCode(): int|string
引数(parameters)
引数なし
引数はありません
戻り値(return)
int|string
BadMethodCallException::getCode メソッドは、例外に関連付けられたエラーコードを返します。このコードは整数または文字列として返されます。
サンプルコード
BadMethodCallException の getCode() を取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * 存在しないメソッドが呼び出された際に、 7 * BadMethodCallException をスローして処理をデモするクラスです。 8 */ 9class MethodCaller 10{ 11 /** 12 * 存在しないインスタンスメソッドが呼び出されたときに自動的に実行されるマジックメソッド。 13 * ここで意図的に BadMethodCallException をスローします。 14 * 15 * @param string $name 呼び出されようとしたメソッド名 16 * @param array $arguments メソッドに渡された引数 17 * @throws BadMethodCallException 常にこの例外をスローします 18 */ 19 public function __call(string $name, array $arguments): void 20 { 21 // 独自の例外コード (例: 1001) を指定して例外を生成します。 22 // 第1引数: 例外メッセージ 23 // 第2引数: 例外コード 24 $code = 1001; 25 $message = "エラー: メソッド '{$name}' は存在しないため呼び出せません。"; 26 throw new BadMethodCallException($message, $code); 27 } 28} 29 30// --- メインの実行処理 --- 31 32$caller = new MethodCaller(); 33 34try { 35 // 意図的に存在しないメソッド 'undefinedMethod' を呼び出し、例外を発生させる 36 $caller->undefinedMethod('param1', 'param2'); 37} catch (BadMethodCallException $e) { 38 // スローされた BadMethodCallException を捕捉する 39 echo "例外がキャッチされました。" . PHP_EOL; 40 41 // getMessage() で例外メッセージを取得して表示 42 echo "メッセージ: " . $e->getMessage() . PHP_EOL; 43 44 // getCode() で例外コード (throw時に指定した 1001) を取得して表示 45 // このコードを利用して、エラーの種類に応じた分岐処理などが可能になります。 46 $exceptionCode = $e->getCode(); 47 echo "例外コード: " . $exceptionCode . PHP_EOL; 48 49 if ($exceptionCode === 1001) { 50 echo "ステータス: 致命的なメソッド呼び出しエラーです。" . PHP_EOL; 51 } 52} 53
このPHPサンプルコードは、BadMethodCallExceptionクラスが持つgetCode()メソッドの具体的な使い方を示しています。getCode()メソッドは、例外が生成された際に設定された「例外コード」を取得するためのものです。このメソッドは引数を持たず、戻り値として整数(int)または文字列(string)型の例外コードを返します。
コードの流れとして、まずMethodCallerクラスに存在しないメソッド(undefinedMethod)を意図的に呼び出します。すると、クラス内の__callマジックメソッドが実行され、コンストラクタの第2引数に1001という例外コードを指定したBadMethodCallExceptionがスローされます。
try...catchブロックでこの例外を捕捉し、例外オブジェクト$eに対して$e->getCode()を呼び出すと、設定された例外コード1001が取得できます。このコードを利用することで、サンプルコードの最後にあるように、特定のエラーコードに基づいて処理を分岐させるなど、エラーの種類に応じた柔軟な対応をプログラムで実装することが可能になります。
getCode()メソッドは、例外が生成される際に第二引数で指定された「例外コード」を取得します。このコードは、どのような種類のエラーが発生したかをプログラムで識別するためのものです。サンプルコードでは、取得したコードが特定の値(1001)であるかを判定し、エラー内容に応じて処理を分岐させています。このように、例外コードを利用することで、より細やかなエラーハンドリングが実現できます。もし例外をthrowする際にコードを指定しない場合、getCode()の戻り値はデフォルトで0になる点に注意してください。この仕組みは、エラーの種類ごとに独自のコードを割り当てることで、堅牢なプログラムを作成する上で役立ちます。