【PHP8.x】DomainException::getCode()メソッドの使い方
getCodeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getCodeメソッドは、スローされたDomainExceptionオブジェクトに設定された例外コードを取得するために使用するメソッドです。このメソッドは、PHPの全ての例外クラスの基底クラスであるExceptionクラスで定義されており、DomainExceptionクラスはこれを継承しています。例外コードとは、例外が発生した際に、その原因をより詳細に示すために開発者が任意で設定できる整数値です。例外をthrowする際に、エラーメッセージと共にこのコードを指定することができます。getCodeメソッドは引数を取らず、戻り値として整数を返します。例外がスローされた時に例外コードが指定されていればその整数値が返され、指定されていない場合はデフォルトで0が返されます。try-catch構文でDomainExceptionを捕捉した際にこのメソッドを利用することで、取得したコードの値に応じて処理を分岐させることが可能になります。例えば、同じ例外でもコードによって異なるエラーメッセージを表示したり、特定のエラーコードの場合のみ特別なログを記録したりするなど、よりきめ細やかなエラーハンドリングを実現できます。このように、getCodeメソッドは、プログラムの堅牢性を高める上で重要な役割を果たします。
構文(syntax)
1<?php 2 3try { 4 // 第2引数にエラーコード(例: 5001)を指定して、例外をスローします。 5 throw new DomainException("指定された値は範囲外です。", 5001); 6} catch (DomainException $e) { 7 // スローされた例外インスタンスから、設定されたコードを取得します。 8 $errorCode = $e->getCode(); 9 10 // 取得したコードを出力します。 11 // 出力: 5001 12 echo $errorCode; 13}
引数(parameters)
引数なし
引数はありません
戻り値(return)
int|string
このメソッドは、例外オブジェクトに設定されたエラーコードを返します。エラーコードは整数または文字列のいずれかです。
サンプルコード
PHP DomainException getCode でエラーコードを取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * 年齢を検証し、無効な場合はエラーコード付きのDomainExceptionをスローします。 7 * 8 * @param int $age 検証する年齢 9 * @throws DomainException 年齢が0未満の場合 10 * @return void 11 */ 12function validateUserAge(int $age): void 13{ 14 // 年齢が定義域(この場合は0以上)外であるかチェック 15 if ($age < 0) { 16 // 例外をスローする際、第2引数にエラーコードを指定できる 17 throw new DomainException('年齢には正の値を指定してください。', 1001); 18 } 19 20 echo "年齢 {$age}歳 は有効です。" . PHP_EOL; 21} 22 23try { 24 // 正常な値を渡して関数を呼び出す 25 validateUserAge(30); 26 27 // 不正な値(定義域外)を渡して、意図的に例外を発生させる 28 validateUserAge(-5); 29 30} catch (DomainException $e) { 31 // catchブロックでDomainExceptionを捕捉する 32 echo '---' . PHP_EOL; 33 echo 'エラーを捕捉しました。' . PHP_EOL; 34 35 // getMessage() でエラーメッセージを取得 36 echo 'メッセージ: ' . $e->getMessage() . PHP_EOL; 37 38 // getCode() で例外に設定されたエラーコードを取得 39 // このコードにより、エラーの種類をプログラムで判別できる 40 echo 'エラーコード: ' . $e->getCode() . PHP_EOL; 41}
DomainException::getCode()メソッドは、スローされたDomainExceptionオブジェクトに設定されたエラーコードを取得するために使用します。例外を発生させる際に、エラーの種類を識別するための数値や文字列をコードとして設定でき、このメソッドでそれを受け取ることができます。
このサンプルコードでは、年齢を検証するvalidateUserAge関数を定義しています。この関数は、引数で受け取った年齢が0未満の場合、「年齢には正の値を指定してください。」というメッセージと、エラーコード1001を持つDomainExceptionをスローします。
try...catchブロック内で、この関数に無効な値-5を渡すと例外が発生し、catchブロックで捕捉されます。catchブロック内では、捕捉した例外オブジェクト(変数$e)に対してgetCode()メソッドを呼び出しています。これにより、例外がスローされた際に第2引数で指定されたエラーコード1001が取得され、画面に出力されます。
getCode()メソッドに引数はありません。戻り値として、設定されたエラーコードを整数(int)または文字列(string)で返します。このエラーコードを利用することで、エラーメッセージの文言に依存することなく、プログラムでエラーの種類を正確に識別し、処理を分岐させることが可能になります。
getCode()メソッドは、例外発生時に設定されたエラーコードを取得するためのものです。このエラーコードは、new DomainException()のように例外インスタンスを作成する際、第2引数で指定する必要があります。もしコードを指定せずに例外をスローした場合、getCode()はデフォルトで0を返します。取得したコードを利用することで、エラーの種類をプログラムで判別し、コードに応じた具体的な後続処理を実装できます。PHP 8からは文字列のコードも設定できますが、一般的には数値を定数として管理すると、コードの可読性と保守性が高まります。DomainExceptionは、値が有効な範囲(定義域)外であることを示す場合に用いるのが適切です。
PHP DomainExceptionのコードを取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * ユーザー情報の検証を行うクラス 7 */ 8class UserValidator 9{ 10 // エラーの種類を識別するためのコードを定数として定義する 11 public const CODE_AGE_OUT_OF_RANGE = 1001; 12 13 /** 14 * 年齢が有効な範囲(ドメイン)内にあるか検証する 15 * 16 * @param int $age 検証する年齢 17 * @return void 18 * @throws DomainException 年齢が0未満の場合 19 */ 20 public function validateAge(int $age): void 21 { 22 // 年齢が0未満の場合、その値はビジネスロジックの定義域外とみなす 23 if ($age < 0) { 24 // DomainException をスローする 25 // 第1引数: エラーメッセージ 26 // 第2引数: エラーコード(プログラムでエラーの種類を識別するために使用) 27 throw new DomainException( 28 '年齢は0歳以上である必要があります。', 29 self::CODE_AGE_OUT_OF_RANGE 30 ); 31 } 32 } 33} 34 35$validator = new UserValidator(); 36 37try { 38 // 例外が発生する可能性のある処理を try ブロックで囲む 39 // ここでは無効な年齢 (-5) を渡して検証する 40 echo "年齢 '-5' を検証します。\n"; 41 $validator->validateAge(-5); 42 echo "検証は正常に完了しました。\n"; // この行は実行されない 43 44} catch (DomainException $e) { 45 // スローされた DomainException を catch ブロックで捕捉する 46 echo "エラーが発生しました。\n"; 47 48 // getMessage() で例外に設定されたメッセージを取得 49 echo " メッセージ: " . $e->getMessage() . "\n"; 50 51 // getCode() で例外に設定されたコードを取得 52 // このコードを利用して、エラーの種類に応じた処理を分岐させることができる 53 $errorCode = $e->getCode(); 54 echo " エラーコード: " . $errorCode . "\n"; 55 56 if ($errorCode === UserValidator::CODE_AGE_OUT_OF_RANGE) { 57 echo " -> 年齢が有効範囲外であるため処理を中断します。\n"; 58 } 59}
DomainException::getCode() は、例外オブジェクトに設定された「エラーコード」を取得するためのメソッドです。このメソッドは引数を取らず、戻り値として例外が生成された際に指定された整数(int)または文字列(string)のコードを返します。
エラーコードは、人間が読むためのエラーメッセージとは異なり、プログラムがエラーの種類を機械的に識別するために使われます。これにより、発生したエラーの種類に応じて処理を分岐させることが可能になります。
サンプルコードでは、年齢を検証する validateAge メソッドが負の値を受け取った際に DomainException をスローしています。このとき、コンストラクタの第2引数に、エラーの種類を示す定数 CODE_AGE_OUT_OF_RANGE (値は1001) がエラーコードとして設定されています。
try...catch ブロックでこの例外を捕捉した後、catch ブロック内で $e->getCode() を呼び出すことで、設定されたエラーコード 1001 を取得しています。そして、取得したコードが UserValidator::CODE_AGE_OUT_OF_RANGE と一致するかを if 文で判定し、特定のエラーに対する専用の処理を実行しています。このように、getCode() を使うことで、エラーメッセージの文言に依存しない、より安定したエラーハンドリングを実現できます。
getCode()メソッドは、例外発生時にプログラムがエラーの種類を識別するためのコードを取得します。例外をthrowする際、コンストラクタの第2引数に数値や文字列でコードを指定すると、catchブロックでその値を受け取れます。このコードを利用すれば、エラーメッセージの内容に頼らず、エラーの種類に応じた処理を正確に分岐させることが可能です。コードを指定しなかった場合のデフォルト値は0になります。サンプルコードのように、エラーコードを意味のある定数として定義しておくと、コードの可読性や保守性が向上するため推奨されます。getMessage()が人間向けのエラー説明であるのに対し、getCode()はプログラム向けの識別子と覚えておきましょう。