【PHP8.x】UnexpectedValueException::getCode()メソッドの使い方
getCodeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
『getCodeメソッドは、スローされたUnexpectedValueExceptionオブジェクトに設定されている例外コードを取得するメソッドです。UnexpectedValueExceptionクラスは、値が期待される型のセットと一致しない場合など、予期しない値がプログラムに渡されたことを示す例外です。例外が生成される際、エラーメッセージに加えて、エラーの種類をプログラムが識別するための整数値を「例外コード」として設定できます。このgetCodeメソッドは、その設定された例外コードを取得するために使用します。取得した例外コードを利用することで、catchブロック内において、エラーの種類に基づいた条件分岐処理を実装できます。例えば、同じ例外クラスであっても、コードの値によってユーザーに表示するメッセージを変えたり、ログに出力する内容を調整したりといった、より詳細なエラーハンドリングが可能になります。このメソッドが返す値は、例外オブジェクトのコンストラクタで指定された整数値であり、もしコードが指定されていなければ0を返します。これは基底クラスであるExceptionから継承された標準的な機能であり、PHPにおける多くの例外クラスで同様に利用できます。
構文(syntax)
1<?php 2 3try { 4 // 第2引数に例外コードを指定して例外をスローします 5 throw new UnexpectedValueException('予期しない値が検出されました。', 101); 6} catch (UnexpectedValueException $e) { 7 // 捕捉した例外オブジェクトから例外コードを取得します 8 $errorCode = $e->getCode(); 9 echo $errorCode; 10} 11 12?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
このメソッドは、例外が発生した際に割り当てられた整数コードを返します。
サンプルコード
UnexpectedValueExceptionのコードを取得する
1<?php 2 3/** 4 * 指定された値が正の整数であるか検証します。 5 * 6 * @param mixed $value 検証する値 7 * @return void 8 * @throws UnexpectedValueException 値が正の整数でない場合にスローされます 9 */ 10function checkPositiveInteger(mixed $value): void 11{ 12 // is_int()で整数か、かつ 0より大きいかをチェック 13 if (!is_int($value) || $value <= 0) { 14 // 期待しない値が渡された場合、エラーメッセージとエラーコード(1001)を指定して例外をスローします 15 throw new UnexpectedValueException('値は正の整数でなければなりません。', 1001); 16 } 17 echo "値 '{$value}' は有効です。" . PHP_EOL; 18} 19 20try { 21 // 正常に処理されるケース 22 checkPositiveInteger(100); 23 24 // 例外がスローされるケース (負の整数) 25 checkPositiveInteger(-5); 26 27} catch (UnexpectedValueException $e) { 28 // スローされた UnexpectedValueException をキャッチします 29 echo "--------------------------" . PHP_EOL; 30 echo "エラーをキャッチしました。" . PHP_EOL; 31 32 // getMessage() で例外に設定されたメッセージを取得します 33 echo "メッセージ: " . $e->getMessage() . PHP_EOL; 34 35 // getCode() で例外に設定されたエラーコード(整数)を取得します 36 // この場合、throw で指定した 1001 が出力されます 37 $errorCode = $e->getCode(); 38 echo "エラーコード: " . $errorCode . PHP_EOL; 39}
PHPのUnexpectedValueException::getCode()メソッドは、スロー(発生)された例外オブジェクトに設定されている「エラーコード」を取得するためのものです。このメソッドは引数を必要とせず、戻り値として整数(int型)のエラーコードを返します。
サンプルコードでは、まずcheckPositiveIntegerという関数が定義されています。この関数は、引数として渡された値が正の整数でない場合に、エラーメッセージとエラーコード1001を持つUnexpectedValueExceptionをスローします。
tryブロック内でこの関数を呼び出し、checkPositiveInteger(-5)が実行されると、値が負の整数であるため例外が発生します。発生した例外はcatchブロックで捕捉されます。
catchブロック内では、捕捉した例外オブジェクト(変数$e)に対して$e->getCode()を実行しています。これにより、例外がスローされた際に第2引数として指定されたエラーコード1001が取得され、画面に表示されます。このようにgetCode()を利用することで、エラーメッセージに加えて、プログラムが識別しやすい数値コードでエラーの種類を特定し、コードに応じた分岐処理などを実装することが可能になります。
getCode()メソッドは、例外発生時にthrowで指定されたエラーコード(整数)を取得するためのものです。このコードは、例外の種類をさらに細かく分類し、エラー内容に応じて処理を分岐させる際に役立ちます。例えば、エラーログの分類や、ユーザーへの表示メッセージの切り替えなどに利用できます。もしthrowする際にエラーコードを指定しない場合、getCode()はデフォルト値の 0 を返します。getMessage()が人間が読むためのエラー内容であるのに対し、getCode()はプログラムが処理を判断するための識別子と考えると理解しやすいでしょう。例外をtry...catchブロックで捕捉しないと、プログラムがそこで停止してしまうため注意が必要です。
PHP UnexpectedValueExceptionのgetCode()で例外コードを取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * ユーザーデータを処理し、値が予期しない形式の場合に例外をスローします。 7 * 8 * この関数は、入力されたユーザーIDを検証します。 9 * IDが正の整数でない場合、エラーの種類に応じた例外コードを持つ 10 * UnexpectedValueExceptionをスローします。 11 * 12 * @param mixed $userId 検証するユーザーID 13 * @throws UnexpectedValueException ユーザーIDが不正な場合にスローされます。 14 * - コード 1001: IDが整数ではない 15 * - コード 1002: IDが正の数ではない 16 */ 17function processUserData(mixed $userId): void 18{ 19 // is_int()で値が整数型かチェック 20 if (!is_int($userId)) { 21 // 整数でない場合、例外コード1001で例外をスロー 22 throw new UnexpectedValueException('ユーザーIDは整数である必要があります。', 1001); 23 } 24 25 // 値が正の数かチェック 26 if ($userId <= 0) { 27 // 正の数でない場合、例外コード1002で例外をスロー 28 throw new UnexpectedValueException('ユーザーIDは正の整数である必要があります。', 1002); 29 } 30 31 echo "ユーザーID '{$userId}' の処理に成功しました。\n"; 32} 33 34try { 35 // 正常なケース 36 processUserData(123); 37 38 // 例外が発生するケース (負の値) 39 processUserData(-5); 40 41} catch (UnexpectedValueException $e) { 42 // 例外(Exception)をキャッチする 43 echo "エラーが発生しました。\n"; 44 45 // getMessage() で例外メッセージを取得 46 echo "メッセージ: " . $e->getMessage() . "\n"; 47 48 // getCode() で例外コードを取得 49 $errorCode = $e->getCode(); 50 echo "例外コード: " . $errorCode . "\n"; 51 52 // 例外コードに基づいて、より具体的なエラーハンドリングを行う 53 switch ($errorCode) { 54 case 1001: 55 echo "対応: データ型が間違っています。システム管理者に連絡してください。\n"; 56 break; 57 case 1002: 58 echo "対応: 値の範囲が不正です。入力内容を確認してください。\n"; 59 break; 60 default: 61 echo "対応: 不明なエラーです。\n"; 62 break; 63 } 64} 65 66?>
UnexpectedValueException::getCode()は、発生した例外に設定された「例外コード」を整数(int)で取得するためのメソッドです。例外処理において、エラーの具体的な原因をプログラムが識別する目的で使用されます。このメソッドは引数を必要としません。
返される例外コードは、throw new UnexpectedValueException('メッセージ', コード)のように、例外が生成される際にコンストラクタの第2引数として指定された数値です。もしコードが指定されずに例外がスローされた場合は、0が返されます。
サンプルコードのprocessUserData関数は、ユーザーIDの妥当性を検証します。IDが整数でない場合は例外コード1001を、正の数でない場合は1002を設定して、UnexpectedValueExceptionをスロー(発生)させます。
try...catchブロックでは、このスローされた例外を捕捉(キャッチ)します。catchブロック内では、例外オブジェクト$eに対して$e->getCode()を呼び出すことで、設定された1001や1002といったコードを取得しています。取得したコードをswitch文で判定することで、エラーの原因に応じた個別の対応処理を実装できます。このようにgetCode()は、画一的ではない、より詳細なエラーハンドリングを実現するために役立ちます。
getCode()は、例外発生の原因を区別するための数値(例外コード)を取得するメソッドです。このコードは、throw new UnexpectedValueException('メッセージ', 1001); のように、例外を発生させる際の第2引数で指定します。もしコードを省略すると、デフォルトで0が設定されます。getMessage()が利用者に向けたエラーメッセージであるのに対し、getCode()が返す数値は、プログラムがエラーの種類を機械的に判断するために利用されます。サンプルコードのようにswitch文と組み合わせることで、同じ例外クラスでもコードによって処理を分岐させ、より具体的で丁寧なエラー対応を実装できます。