【PHP8.x】LengthException::getCode()メソッドの使い方
getCodeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
『getCodeメソッドは、スローされたLengthExceptionオブジェクトに設定されている例外コードを取得するメソッドです。LengthExceptionは、PHPにおける例外クラスの一つで、主に文字列や配列などの長さが不正である場合に発生するエラーを示します。このgetCodeメソッドは、LengthExceptionクラスが直接定義しているものではなく、全ての例外クラスの基底となるExceptionクラスから継承しています。例外コードとは、例外が発生した際に、そのエラーの種類をプログラム的に識別するために開発者が任意で設定できる数値のことです。例えば、try...catch構文でLengthExceptionを捕捉した際に、このメソッドを使って例外コードを取得し、その値に応じてエラーメッセージを変えたり、特定の回復処理を行ったりするなど、より詳細なエラーハンドリングを実装できます。戻り値は整数(int)型であり、例外をスローする際にコードが指定されなかった場合は、デフォルトで0が返されます。
構文(syntax)
1<?php 2 3try { 4 $password = "short"; 5 6 if (strlen($password) < 8) { 7 // 文字数が足りない場合、例外コード `1001` を指定してLengthExceptionをスローします。 8 throw new LengthException("パスワードが短すぎます。", 1001); 9 } 10} catch (LengthException $e) { 11 // 捕捉した例外オブジェクトから、指定された例外コードを取得して出力します。 12 // 出力: 1001 13 echo $e->getCode(); 14}
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
LengthExceptionクラスのgetCodeメソッドは、例外が発生した際に割り当てられている整数コードを返します。
サンプルコード
PHP LengthExceptionのエラーコードを取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * 指定された文字列の長さを検証するクラス。 7 */ 8class StringValidator 9{ 10 /** 11 * 文字列が指定された最小長を満たしているか検証します。 12 * 13 * @param string $value 検証する文字列 14 * @param int $minLength 許容される最小長 15 * @throws LengthException 文字列が最小長に満たない場合 16 */ 17 public function validateMinLength(string $value, int $minLength): void 18 { 19 if (mb_strlen($value) < $minLength) { 20 // 文字列の長さが足りない場合、LengthExceptionをスローします。 21 // 第2引数に、このエラーを識別するための整数コードを指定できます。 22 throw new LengthException( 23 "入力は{$minLength}文字以上である必要があります。", // エラーメッセージ 24 1001 // エラーコード 25 ); 26 } 27 } 28} 29 30$validator = new StringValidator(); 31$shortInput = 'abc'; 32$minLength = 8; 33 34try { 35 // 短すぎる文字列で検証を試みる 36 echo "検証中: '{$shortInput}' (最小{$minLength}文字)" . PHP_EOL; 37 $validator->validateMinLength($shortInput, $minLength); 38 echo "検証成功" . PHP_EOL; 39} catch (LengthException $e) { 40 // スローされたLengthExceptionを捕捉します。 41 echo "エラー: 検証に失敗しました。" . PHP_EOL; 42 43 // getCode()メソッドを使って、例外に設定されたエラーコードを取得します。 44 // これにより、エラーの種類をプログラムで判別できます。 45 $errorCode = $e->getCode(); 46 47 echo "エラーコード: " . $errorCode . PHP_EOL; // "エラーコード: 1001" と出力される 48 echo "メッセージ: " . $e->getMessage() . PHP_EOL; 49}
LengthExceptionクラスのgetCode()メソッドは、例外オブジェクトに設定された「エラーコード」を整数(int)で取得するために使用します。エラーコードとは、エラーの種類をプログラムで識別するために開発者が任意に設定する数値のことです。
サンプルコードでは、validateMinLengthメソッドが文字列の長さ不足を検知した際にLengthExceptionをスロー(発生)させています。このとき、new LengthException()の第2引数に、エラーコードとして1001という整数を指定しています。
try...catch構文でこの例外が捕捉されると、catchブロック内で$e->getCode()が呼び出されます。これにより、例外オブジェクト$eに設定されていたエラーコード1001が取得され、画面に出力されます。
このメソッドには引数はなく、戻り値として例外生成時に指定された整数値が返されます。エラーコードを用いることで、エラーメッセージの文言に頼ることなく、数値によってエラーの種類を正確に判別し、コードに応じた分岐処理などを実装できます。
getCode()メソッドは、プログラムがエラーの種類を機械的に判別するための整数値(エラーコード)を取得します。これは人間が読むためのエラーメッセージとは目的が異なります。エラーコードは、throw new LengthException() のように例外を発生させる際の第2引数で指定します。この引数を省略した場合、getCode()が返す値はデフォルトで0になります。このメソッドはLengthExceptionだけでなく、PHPの基本的な例外クラスであるExceptionで定義されているため、他の多くの例外オブジェクトでも同様に使用できます。エラーコードを用いることで、switch文などでエラーの種類に応じた具体的な処理の分岐が可能になり、より堅牢なエラーハンドリングが実現できます。
PHP LengthExceptionのgetCode()で例外コードを取得する
1<?php 2 3/** 4 * ユーザー名の長さを検証し、不正な場合は例外コード付きでLengthExceptionをスローします。 5 * 6 * @param string $username 検証するユーザー名 7 * @throws LengthException ユーザー名の長さが8文字未満または20文字を超える場合 8 */ 9function validateUsernameLength(string $username): void 10{ 11 $minLength = 8; 12 $maxLength = 20; 13 $length = mb_strlen($username); 14 15 // 長さが短すぎる場合 16 if ($length < $minLength) { 17 // エラーの種類を識別するため、独自の例外コード 1001 を設定 18 throw new LengthException( 19 "ユーザー名は{$minLength}文字以上である必要があります。", 20 1001 21 ); 22 } 23 24 // 長さが長すぎる場合 25 if ($length > $maxLength) { 26 // エラーの種類を識別するため、独自の例外コード 1002 を設定 27 throw new LengthException( 28 "ユーザー名は{$maxLength}文字以下である必要があります。", 29 1002 30 ); 31 } 32} 33 34// 検証するユーザー名の配列 35$testUsernames = [ 36 'valid_user_name', // 正常なケース 37 'short', // 短すぎるケース 38 'this_is_a_very_long_user_name', // 長すぎるケース 39]; 40 41foreach ($testUsernames as $username) { 42 echo "--- 検証開始: '{$username}' ---" . PHP_EOL; 43 try { 44 // 検証関数を呼び出す 45 validateUsernameLength($username); 46 echo "結果: ユーザー名は有効です。" . PHP_EOL; 47 } catch (LengthException $e) { 48 // LengthException をキャッチ 49 echo "エラーメッセージ: " . $e->getMessage() . PHP_EOL; 50 51 // getCode() メソッドで例外コードを取得 52 $errorCode = $e->getCode(); 53 54 // 取得した例外コードに応じて処理を分岐 55 switch ($errorCode) { 56 case 1001: 57 echo "エラーコード: {$errorCode} (エラー種別: 文字数不足)" . PHP_EOL; 58 break; 59 case 1002: 60 echo "エラーコード: {$errorCode} (エラー種別: 文字数超過)" . PHP_EOL; 61 break; 62 default: 63 echo "エラーコード: {$errorCode} (エラー種別: 不明な長さエラー)" . PHP_EOL; 64 break; 65 } 66 } 67}
Exception::getCode()メソッドは、スローされた例外オブジェクトに設定されている「例外コード」を整数(int)で取得するためのものです。このメソッドは引数を必要としません。例外コードを利用することで、同じ種類の例外であっても、発生したエラーの具体的な原因をプログラムで識別できます。
このサンプルコードは、ユーザー名の長さを検証し、不正な場合にLengthExceptionをスローします。関数validateUsernameLength内では、文字数が短すぎる場合に1001、長すぎる場合に1002というように、エラーの原因ごとに異なる整数値を例外コードとして設定しています。このコードは、new LengthException()の第二引数で指定されます。
try...catchブロックで例外を捕捉した後、$e->getCode()を呼び出すと、この設定された例外コードを取得できます。サンプルでは、取得したコードをswitch文で評価し、「文字数不足(1001)」か「文字数超過(1002)」かを判別して、それぞれに応じたメッセージを表示しています。このようにgetCode()は、エラーメッセージの文字列解析に頼ることなく、エラーの種類を正確に特定し、処理を分岐させるために役立ちます。
getCode()メソッドは、例外の種類を識別するための数値(例外コード)を取得します。エラーメッセージの文字列で判断するよりも、このコードで処理を分岐させる方がプログラムにとって確実です。例外コードは、throw new LengthException("メッセージ", 1001)のように、例外インスタンスを作成する際の第2引数に整数で指定します。このコードを指定しなかった場合、getCode()の戻り値はデフォルトで0になる点に注意してください。どのようなエラーにどのコードを割り当てるかは開発者が自由に決められるため、プロジェクト内でルールを共有しておくと、エラー処理が分かりやすくなります。