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

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

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

作成日: 更新日:

基本的な使い方

『getLineメソッドは、LengthExceptionオブジェクトがスローされたソースコードの行番号を取得する処理を実行するメソッドです。LengthExceptionは、プログラムにおいて配列の要素数や文字列の長さなどが不正である、といった無効な長さに関するエラーが発生した場合にスローされる例外クラスです。プログラム実行中にこのような例外が発生した際、その原因を特定するためには、エラーがどこで起きたかを知ることが不可欠です。このメソッドをtry...catchブロック内で捕捉した例外オブジェクトに対して呼び出すことで、例外が発生した具体的な行番号を整数値として取得できます。この情報は、getFileメソッドで得られるファイル名やgetMessageメソッドで得られるエラーメッセージと組み合わせることで、デバッグ作業を大幅に効率化します。このメソッドは、PHPの基本的なExceptionクラスで定義されており、LengthExceptionはそれを継承しているため利用可能です。したがって、他の多くの例外クラスでも同様に使用することができます。』

構文(syntax)

1final public getLine(): int

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

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

サンプルコード

PHP LengthException getLine() で例外行番号を取得する

1<?php
2
3/**
4 * ユーザー名の長さを検証し、不適切な場合はLengthExceptionをスローするクラス
5 */
6class UsernameValidator
7{
8    /**
9     * ユーザー名の長さを検証します。
10     *
11     * @param string $username 検証するユーザー名
12     * @throws LengthException ユーザー名が3文字未満または20文字を超える場合
13     */
14    public function validate(string $username): void
15    {
16        $length = mb_strlen($username);
17
18        if ($length < 3 || $length > 20) {
19            // 長さが不正な場合に例外をスローします。
20            // この行の番号が getLine() で取得されます。
21            throw new LengthException('ユーザー名は3文字以上20文字以下でなければなりません。');
22        }
23
24        echo "ユーザー名 '{$username}' は有効です。" . PHP_EOL;
25    }
26}
27
28$validator = new UsernameValidator();
29
30try {
31    // 短すぎるユーザー名を渡して、意図的に例外を発生させます。
32    $validator->validate('NG');
33} catch (LengthException $e) {
34    // スローされた例外をキャッチします。
35    echo "エラー: " . $e->getMessage() . PHP_EOL;
36
37    // getLine()メソッドを使い、例外がスローされたソースコードの行番号を取得・表示します。
38    $errorLine = $e->getLine();
39    echo "例外が発生した行番号: " . $errorLine . PHP_EOL;
40}

PHPのLengthException::getLine()メソッドは、例外がスローされたソースコードの行番号を取得するために使用します。このメソッドは引数を取らず、例外が発生した行番号を整数(int)で返します。プログラムのデバッグ時に、エラーがどこで起きたかを正確に特定するのに役立ちます。

サンプルコードでは、まずUsernameValidatorというクラスを定義しています。このクラスのvalidateメソッドは、引数で受け取ったユーザー名の文字数をチェックし、長さが3文字未満か20文字を超える場合にLengthExceptionをスローします。

プログラムの実行部分では、tryブロックの中で意図的に短すぎるユーザー名"NG"をvalidateメソッドに渡し、例外を発生させています。発生した例外はcatchブロックで捕捉されます。

catchブロック内では、捕捉した例外オブジェクト(変数$e)に対して$e->getLine()を呼び出しています。これにより、validateメソッド内でthrow new LengthException(...)が実行された行の番号が取得され、画面に表示されます。このように、getLine()を使うことで、エラーメッセージだけでなく、エラーが発生した具体的な場所も知ることができ、迅速な問題解決につながります。

getLine()メソッドは、例外が throw されたソースコードの行番号を返します。注意点として、このメソッドが返すのは例外を catch した場所の行番号ではなく、例外が実際に発生した throw 文の行番号です。この情報は、エラーの原因箇所を特定するデバッグ作業で非常に役立ちます。より詳細なデバッグのためには、getFile()でファイル名を、getMessage()でエラーメッセージを取得するなど、他の例外関連メソッドと組み合わせて利用するのが一般的です。運用時には、getLine()で得た行番号などの詳細なエラー情報をユーザーに直接表示することは避けてください。システムの内部構造が推測されるセキュリティリスクを避けるため、エラー詳細はログファイルに記録し、開発者のみが参照できるようにすることが推奨されます。

関連コンテンツ

関連プログラミング言語