【PHP8.x】DomainException::getLine()メソッドの使い方
getLineメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getLineメソッドは、DomainExceptionがスローされたソースコード上の行番号を取得する処理を実行するメソッドです。このメソッドは、PHPの全ての例外クラスの基盤となるExceptionクラスから継承されており、DomainExceptionクラスでも同様に利用できます。プログラムの実行中に、ある値が期待される定義域に含まれていないためにDomainExceptionが発生した場合、開発者はどのコードが問題を引き起こしたのかを特定する必要があります。このメソッドを呼び出すことで、例外が発生した正確な行番号を整数値として取得できるため、デバッグ作業を大幅に効率化できます。通常、try-catch構文のcatchブロック内で、捕捉した例外オブジェクトのインスタンスからこのメソッドを呼び出して使用します。取得した行番号は、エラーメッセージを記録するログファイルへの出力などに活用され、ファイル名を取得するgetFile()メソッドや例外メッセージを取得するgetMessage()メソッドと組み合わせることで、エラー発生時の状況をより詳細に把握することが可能になります。このように、getLineメソッドはアプリケーションのエラーハンドリングと安定運用に不可欠な機能を提供します。
構文(syntax)
1<?php 2 3function validate(int $age) 4{ 5 if ($age < 0) { 6 // この行で例外がスローされます 7 throw new DomainException("年齢に負の値は指定できません。"); 8 } 9} 10 11try { 12 validate(-10); 13} catch (DomainException $e) { 14 // 例外がスローされた行番号を取得します 15 $line = $e->getLine(); 16 echo "エラーが発生した行: " . $line; 17} 18 19?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
このメソッドは、例外が発生したソースコードの行番号を整数で返します。
サンプルコード
PHP DomainException getLineで発生行を取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * ユーザーの年齢を検証し、無効な値であれば DomainException をスローします。 7 * 8 * @param int $age 検証する年齢 9 * @throws DomainException 年齢が有効な範囲(0〜120歳)にない場合 10 */ 11function validateUserAge(int $age): void 12{ 13 if ($age < 0 || $age > 120) { 14 // 有効なドメイン(範囲)外の値が渡されたため、例外をスローします。 15 throw new DomainException("年齢は0歳から120歳の間でなければなりません。"); 16 } 17} 18 19try { 20 // 無効な年齢を渡して、意図的に例外を発生させます。 21 validateUserAge(150); 22} catch (DomainException $e) { 23 // 捕捉した例外オブジェクトから、例外が発生した行番号を取得して表示します。 24 // getLine() は、throwされた場所の行番号を返します。 25 echo "エラーメッセージ: " . $e->getMessage() . PHP_EOL; 26 echo "例外が発生したファイル: " . $e->getFile() . PHP_EOL; 27 echo "例外が発生した行番号: " . $e->getLine() . PHP_EOL; 28}
DomainException::getLine()は、プログラムの実行中に例外がスロー(発生)された箇所の行番号を取得するためのメソッドです。エラーの原因を特定するデバッグ作業において非常に役立ちます。
このサンプルコードでは、まずvalidateUserAgeという関数を定義しています。この関数は、引数で受け取った年齢が有効な範囲(0〜120歳)にない場合、DomainExceptionという種類の例外を発生させます。DomainExceptionは、値が定義された有効な領域(ドメイン)にないことを示すための例外です。
次にtry...catch構文を使い、意図的に無効な年齢(150)を関数に渡して例外を発生させています。発生した例外はcatchブロックで捕捉され、その詳細な情報が変数$eに格納されます。
ここで$e->getLine()を呼び出すことで、例外がthrowされた行の番号を取得しています。このメソッドは引数を必要とせず、戻り値として行番号を整数(int型)で返します。コードの実行結果では、throw new DomainException(...)と書かれた行の番号が表示されます。このようにgetFile()やgetMessage()と組み合わせることで、どのファイルの何行目で、どのようなエラーが起きたのかを正確に知ることができます。
getLine()メソッドは、例外を捕捉したcatchブロックの行ではなく、例外が実際にthrowされた行の番号を返します。このサンプルコードでは、validateUserAge関数内でthrow new DomainException(...)と書かれた行が該当します。この情報は、エラーの原因箇所を特定するデバッグ時に非常に役立ちます。DomainExceptionは、値が定義された有効な範囲や集合から外れていることを示すための例外です。状況に応じて適切な例外クラスを選ぶことが重要です。注意点として、getLine()やgetFile()で得られるファイルパスや行番号を、本番環境でそのままユーザーに表示すると、システムの内部情報が漏洩する危険があります。本番環境ではこれらの情報をエラーログに記録し、ユーザーには汎用的なエラーメッセージを見せるようにしてください。