Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】RangeException::getLine()メソッドの使い方

getLineメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

getLineメソッドは、例外がスローされたソースコードのファイルにおける行番号を取得する処理を実行するメソッドです。このメソッドは、プログラムの実行中にエラーが発生した際、その原因となったコードが具体的に何行目に書かれているかを特定するために使用されます。特に、デバッグ作業においてエラー箇所の迅速な発見に大変役立ちます。getLineメソッドは、通常try-catch構文のcatchブロック内で使用され、捕捉したRangeExceptionなどの例外オブジェクトから呼び出します。戻り値は、例外が発生した行番号を示す整数値です。このメソッドは、PHPの基本的な例外クラスであるExceptionクラスで定義されているため、RangeExceptionだけでなく、Exceptionを継承する他の多くの例外クラスでも同様に利用することが可能です。これにより、さまざまな種類の例外処理において、一貫した方法で行番号を特定できます。エラーログを記録する際、getFileメソッドで得られるファイル名とこのメソッドで得られる行番号を組み合わせることで、エラーの原因究明をより効率的に進めることができます。

構文(syntax)

1<?php
2
3try {
4    // この行 (5行目) で例外をスローします
5    throw new RangeException("値が範囲外です");
6} catch (RangeException $e) {
7    // 例外がスローされた行番号を取得します
8    $lineNumber = $e->getLine();
9    echo $lineNumber; // "5" を出力します
10}

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

このメソッドは、例外が発生したソースコードの行番号を整数で返します。

サンプルコード

PHP RangeException getLine()で発生行を取得する

1<?php
2
3/**
4 * 指定された年齢が有効な範囲内にあるか検証します。
5 *
6 * @param int $age 検証する年齢
7 * @throws RangeException 年齢が0未満または150より大きい場合
8 */
9function validateAge(int $age): void
10{
11    // 年齢が有効な範囲(0〜150歳)にない場合、例外をスローします。
12    if ($age < 0 || $age > 150) {
13        throw new RangeException('年齢は0歳から150歳の間でなければなりません。');
14    }
15    echo "{$age}歳は有効な年齢です。" . PHP_EOL;
16}
17
18try {
19    // 正常な値を渡して関数を呼び出す
20    validateAge(30);
21
22    // わざと範囲外の値を渡し、RangeExceptionを発生させる
23    validateAge(-10);
24} catch (RangeException $e) {
25    // catchブロックで例外を捕捉します。
26
27    // getLine()メソッドを使って、例外がスローされたソースコードの行番号を取得します。
28    $line = $e->getLine();
29
30    // 例外メッセージと発生した行番号を出力します。
31    echo "エラー: " . $e->getMessage() . PHP_EOL;
32    echo "例外が発生した行番号: " . $line . PHP_EOL;
33}

RangeExceptionクラスのgetLine()メソッドは、例外がスローされたソースコードの行番号を取得します。このメソッドに引数はなく、戻り値として例外が発生した箇所の行番号を整数(int)で返します。

サンプルコードのvalidateAge関数は、引数の年齢が有効範囲外の場合にRangeExceptionを発生させます。tryブロック内で、この関数にわざと不正な値-10を渡すことで、意図的に例外を発生させています。

catchブロックでは、発生したRangeExceptionオブジェクトを$eという変数で捕捉しています。そして、$e->getLine()を実行することで、validateAge関数内でthrow new RangeException(...)と記述された行の番号を取得できます。この取得した行番号とエラーメッセージを画面に出力することで、開発者はプログラムのどこで問題が起きたのかを正確に知ることができます。

このようにgetLine()は、エラーの原因箇所を特定し、デバッグ作業を効率的に進めるために非常に役立つメソッドです。

getLine()メソッドは、例外がスロー(throw)されたソースコードの行番号を整数で返します。デバッグ時にエラーの発生箇所を正確に特定するのに役立ちます。注意点として、tryブロック内で例外が発生すると、その時点で処理は中断され、後続のコードは実行されずにcatchブロックへ直接移ります。このサンプルコードではvalidateAge(-10);の行で例外が起きるため、もしその後に別の処理があっても実行されません。また、getLine()で得られる行番号などの詳細なエラー情報は、開発中のデバッグで利用するためのものです。本番環境でユーザーにそのまま表示するとセキュリティリスクになり得るため、エラーログに記録するなどの使い方を推奨します。

関連コンテンツ