【PHP8.x】InvalidArgumentException::getCode()メソッドの使い方
getCodeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
『getCodeメソッドは、スローされたInvalidArgumentExceptionインスタンスに設定されている例外コードを取得するメソッドです。このメソッドは、PHPの基本的な例外クラスであるExceptionから継承されており、InvalidArgumentExceptionでも同様に使用することができます。例外コードは、人間が読むための例外メッセージとは別に、エラーの種類をプログラム上で識別するために用いられる整数値です。開発者は、InvalidArgumentExceptionをnewキーワードで生成する際に、コンストラクタの第二引数として任意の整数コードを渡すことが可能です。そして、try-catchブロックでこの例外を捕捉した際に、getCodeメソッドを呼び出すことで設定したコードを取得できます。取得したコードを利用して、switch文などでエラーの種類に応じた分岐処理を実装するなど、より柔軟で詳細なエラーハンドリングを実現するために役立ちます。もし例外の生成時にコードが指定されなかった場合、このメソッドはデフォルトで0を返します。』
構文(syntax)
1<?php 2try { 3 // 例外をスローする際に、第2引数で例外コードを指定します。 4 throw new InvalidArgumentException("引数が無効です。", 1001); 5} catch (InvalidArgumentException $e) { 6 // getCode() メソッドで例外コードを取得します。 7 $code = $e->getCode(); 8 echo $code; // 1001 が出力されます。 9} 10?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int|string
このメソッドは、例外が生成された際に設定されたエラーコードを返します。エラーコードは整数または文字列として保持されている場合があります。
サンプルコード
PHPの例外エラーコードを取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * 指定された値が有効な評価スコア(1〜5)であるか検証するクラス 7 */ 8class ScoreValidator 9{ 10 // エラーコードを定数として定義 11 private const ERROR_CODE_TOO_LOW = 1001; 12 private const ERROR_CODE_TOO_HIGH = 1002; 13 14 /** 15 * スコアを検証し、無効な場合はエラーコード付きの例外をスローします。 16 * 17 * @param int $score 検証するスコア 18 * @throws InvalidArgumentException スコアが1未満または5より大きい場合 19 * @return void 20 */ 21 public function validate(int $score): void 22 { 23 if ($score < 1) { 24 // スコアが1未満の場合、エラーコード1001で例外をスロー 25 throw new InvalidArgumentException( 26 'スコアは1以上である必要があります。', 27 self::ERROR_CODE_TOO_LOW 28 ); 29 } 30 31 if ($score > 5) { 32 // スコアが5より大きい場合、エラーコード1002で例外をスロー 33 throw new InvalidArgumentException( 34 'スコアは5以下である必要があります。', 35 self::ERROR_CODE_TOO_HIGH 36 ); 37 } 38 39 echo "スコア: {$score} は有効です。" . PHP_EOL; 40 } 41} 42 43$validator = new ScoreValidator(); 44 45// さまざまなスコアで検証を試みる 46$testScores = [3, 6, 0]; 47 48foreach ($testScores as $score) { 49 try { 50 // バリデーションを実行 51 echo "{$score} を検証中... "; 52 $validator->validate($score); 53 } catch (InvalidArgumentException $e) { 54 // InvalidArgumentExceptionを捕捉 55 56 // getCode() を使って、例外に設定されたエラーコードを取得 57 $errorCode = $e->getCode(); 58 $errorMessage = $e->getMessage(); 59 60 echo PHP_EOL; 61 echo " [エラー発生]" . PHP_EOL; 62 echo " メッセージ: " . $errorMessage . PHP_EOL; 63 echo " エラーコード: " . $errorCode . PHP_EOL; // ここでエラーコードを表示 64 } finally { 65 echo "--------------------" . PHP_EOL; 66 } 67}
getCode()は、例外がスローされた際に、その例外オブジェクトに設定された「例外コード」を取得するためのメソッドです。このメソッドは、PHPの基本的なExceptionクラスから継承されているため、InvalidArgumentExceptionを含む多くの例外クラスで使用できます。getCode()メソッドに引数はなく、戻り値として、例外が生成されたときに設定された整数(int)または文字列(string)のコードを返します。コードが明示的に設定されていない場合、通常は整数の0が返されます。
サンプルコードは、1から5の範囲のスコアを検証するScoreValidatorクラスの例です。validateメソッドは、引数$scoreが範囲外の場合、あらかじめ定義されたエラーコード(1001または1002)を第2引数に指定してInvalidArgumentExceptionをスローします。
実行部分のtry...catchブロックでは、この例外を捕捉しています。catchブロック内で、例外オブジェクト$eに対して$e->getCode()を呼び出すことで、例外発生時に設定されたエラーコードを取得し、画面に表示しています。このようにgetCode()を利用することで、エラーメッセージの内容に依存せず、コードに基づいてエラーの種類を正確に識別し、その後の処理を分岐させることが可能になります。
getCode()メソッドは、例外発生時に設定されたエラーコードを取得します。このエラーコードは、throw new InvalidArgumentException()のように例外を生成する際のコンストラクタ第二引数で指定した値です。もしこの第二引数を省略して例外をスローした場合、getCode()はデフォルト値として整数0を返すため注意が必要です。サンプルコードのように、定数を使ってエラーコードを管理すると、コードの可読性や保守性が向上します。エラーコードは開発者が任意に定義するため、プロジェクト内でルールを決めておくと、エラー内容に応じた分岐処理が書きやすくなります。戻り値の型はintまたはstringですが、一般的に整数を用いると効率的な処理につながります。
PHP Exception getCode() でエラーコードを取得する
1<?php 2declare(strict_types=1); 3 4/** 5 * ユーザーIDを検証し、無効な場合はエラーコード付きの例外をスローします。 6 * 7 * @param int $userId 検証するユーザーID 8 * @throws InvalidArgumentException ユーザーIDが1未満の場合 9 */ 10function validateUserId(int $userId): void 11{ 12 // ユーザーIDが1未満の場合は無効な引数とみなす 13 if ($userId < 1) { 14 // 第1引数にエラーメッセージ、第2引数にエラーコードを指定して例外をスローする 15 throw new InvalidArgumentException( 16 'ユーザーIDは正の整数である必要があります。', 17 1001 // アプリケーション固有のエラーコード 18 ); 19 } 20 21 echo "ユーザーID '{$userId}' は有効です。" . PHP_EOL; 22} 23 24try { 25 // 有効なユーザーIDで関数を呼び出す 26 validateUserId(123); 27 28 // 無効なユーザーID(0)で関数を呼び出し、意図的に例外を発生させる 29 validateUserId(0); 30 31} catch (InvalidArgumentException $e) { 32 // catchブロックでスローされた例外を捕捉する 33 echo "エラーが発生しました。" . PHP_EOL; 34 echo "メッセージ: " . $e->getMessage() . PHP_EOL; 35 36 // getCode() メソッドを使って、例外に設定されたエラーコードを取得する 37 echo "エラーコード: " . $e->getCode() . PHP_EOL; 38}
getCode()メソッドは、発生した例外(エラー)に設定されている「エラーコード」を取得するために使用します。エラーの種類を番号で管理したい場合に便利です。
このサンプルコードでは、まずvalidateUserIdという関数を定義しています。この関数は、引数で受け取ったユーザーIDが1未満の場合に、InvalidArgumentExceptionという種類の例外を発生させます。例外を発生させる際、コンストラクタの第1引数にエラーメッセージ、第2引数にエラーコードとして1001を設定しています。
次にtry...catchブロックで、この関数を呼び出しています。validateUserId(0)が実行されると、関数内で例外が発生し、catchブロックの処理に移ります。catchブロックでは、発生した例外オブジェクトを$eという変数で受け取ります。
そして$e->getCode()を呼び出すことで、例外オブジェクトに設定されていたエラーコード1001を取得し、画面に表示しています。このように、getCode()メソッドは引数を取らず、戻り値として例外に設定された整数または文字列のエラーコードを返します。これにより、エラーメッセージの内容に依存せず、コードによってエラーの種類を機械的に判別することが可能になります。
getCode()メソッドは、例外オブジェクトに設定されたエラーコードを取得します。このエラーコードは、throw new で例外を生成する際に、コンストラクタの第2引数として開発者が意図的に指定した値です。もしエラーコードを指定せずに例外をスローした場合、getCode()はデフォルトで 0 を返します。エラーメッセージは将来変更される可能性がありますが、エラーコードに基づいて処理を分岐させることで、メッセージ内容に依存しない安定したエラーハンドリングが可能になります。アプリケーション固有のエラーコード体系を定義し、適切に管理することが、堅牢なシステムを構築する上で重要です。