【PHP8.x】UnexpectedValueException::getLine()メソッドの使い方
getLineメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getLineメソッドは、UnexpectedValueException例外がスローされたソースコードの行番号を取得するメソッドです。UnexpectedValueExceptionは、プログラムの実行中に値が期待される型や範囲に一致しない場合に発生する例外です。プログラムで予期せぬエラーが発生した際、その原因を特定するためには、問題がコードのどの部分で起きたかを知ることが不可欠です。このgetLineメソッドを呼び出すと、例外がスローされた時点の行番号を整数(int)として取得することができます。このメソッドは、PHPの全ての例外クラスの基底クラスであるExceptionクラスで定義されているため、UnexpectedValueExceptionだけでなく、他の多くの例外オブジェクトでも同様に使用可能です。通常、try-catch構文で例外を捕捉した際に、catchブロック内で例外オブジェクトに対してこのメソッドを使用します。取得した行番号を、getFileメソッドで得られるファイル名やgetMessageメソッドで得られるエラーメッセージと組み合わせることで、エラーログに詳細な情報を記録し、デバッグ作業を効率的に進めるために役立ちます。このように、本メソッドは堅牢なエラーハンドリングを実装する上で重要な役割を果たします。
構文(syntax)
1<?php 2 3try { 4 // この行で例外をスローします 5 throw new UnexpectedValueException("予期しない値のエラーが発生しました。"); 6} catch (UnexpectedValueException $e) { 7 // 例外がスローされた行番号を取得して出力します 8 echo $e->getLine(); 9}
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
このメソッドは、例外が発生したソースコードの行番号を整数で返します。
サンプルコード
PHP UnexpectedValueException の行番号を取得する
1<?php 2 3/** 4 * ユーザーIDを検証する関数。 5 * 整数でない場合に UnexpectedValueException をスローします。 6 * 7 * @param mixed $userId 検証するユーザーID 8 * @return void 9 * @throws UnexpectedValueException ユーザーIDが整数でない場合 10 */ 11function validateUserId(mixed $userId): void 12{ 13 if (!is_int($userId)) { 14 // 値が期待される型(整数)でないため、例外をスローします。 15 // getLine() は、この `throw` が実行された行番号を返します。 16 throw new UnexpectedValueException('ユーザーIDは整数である必要があります。'); 17 } 18 echo "ユーザーID '{$userId}' は正常です。" . PHP_EOL; 19} 20 21// 例外を捕捉するための try-catch ブロック 22try { 23 // 正常なケース 24 validateUserId(123); 25 26 // 意図的に例外を発生させるケース (IDが文字列) 27 validateUserId('abc'); 28 29} catch (UnexpectedValueException $e) { 30 // スローされた例外をキャッチします。 31 echo "----------------------------------------" . PHP_EOL; 32 echo "エラー: 予期しない値が検出されました。" . PHP_EOL; 33 34 // getMessage() で例外メッセージを取得します。 35 echo "メッセージ: " . $e->getMessage() . PHP_EOL; 36 37 // getLine() で例外がスローされた行番号を取得して表示します。 38 echo "発生行: " . $e->getLine() . "行目" . PHP_EOL; 39 40 // getFile() で例外が発生したファイルパスを取得します。 41 echo "ファイル: " . $e->getFile() . PHP_EOL; 42 echo "----------------------------------------" . PHP_EOL; 43} 44
UnexpectedValueExceptionクラスに所属するgetLine()メソッドは、プログラム実行中に例外がスローされたソースコードの行番号を取得します。このメソッドはPHPの基本的なExceptionクラスから継承されているため、多くの例外クラスで共通して利用できます。
このメソッドは引数を取りません。戻り値として、例外がthrowキーワードによってスローされた箇所の行番号を整数(int)で返します。
サンプルコードでは、validateUserId関数が定義されており、引数が整数でない場合にUnexpectedValueExceptionをスローします。tryブロック内でこの関数に文字列'abc'を渡すことで意図的に例外を発生させています。続くcatchブロックでスローされた例外オブジェクト(変数$e)を捕捉し、$e->getLine()を呼び出しています。これにより、throw new UnexpectedValueException(...)と書かれた行の番号が取得され、画面に出力されます。このようにgetLine()メソッドは、エラーが発生した正確な場所を特定する際に非常に役立ち、デバッグ作業を効率的に進めるために重要です。
getLine()メソッドは、例外がthrowされたコードの行番号を返します。これは関数を呼び出した行ではなく、関数内でthrow文が書かれている行を指す点に注意が必要です。この情報はデバッグ時にエラー箇所を特定する上で非常に役立ちます。より効果的に問題を解決するため、getMessage()でエラー内容、getFile()でファイル名を合わせてログに記録することが推奨されます。ただし、取得した行番号やファイルパスをそのまま画面に表示すると、システムの内部情報が漏洩する危険があるため、開発者向けのログ出力に限定して利用するのが安全な使い方です。