【PHP8.x】JsonException::getLine()メソッドの使い方
getLineメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getLineメソッドは、JsonExceptionがスローされたソースコードの行番号を取得するメソッドです。このメソッドは、PHPの基本的な例外クラスであるExceptionから継承されたもので、Throwableインターフェースで定義されている標準的な機能の一つです。PHP 7.3以降、json_encode()やjson_decode()といったJSON関連関数は、エラーが発生した際にJSON_THROW_ON_ERRORフラグを指定するとJsonExceptionをスローします。try...catch構文を用いてこの例外を捕捉した際に、getLine()メソッドを呼び出すことで、例外がどのファイルの何行目で発生したのかを正確に特定できます。取得できる行番号は整数値です。この情報は、getFile()メソッドで取得できるファイルパスと組み合わせることで、デバッグ作業を大幅に効率化します。特に、複雑なアプリケーションにおいて、エラー発生箇所を迅速に突き止め、問題を修正するための重要な手がかりとなります。エラーログにこの情報を記録しておくことで、運用中の予期せぬ問題に対しても迅速な対応が可能になります。
構文(syntax)
1<?php 2try { 3 // 不正なJSON文字列をデコードしようとすると、この行でJsonExceptionがスローされます 4 json_decode('{ "user": "test", }', flags: JSON_THROW_ON_ERROR); 5} catch (JsonException $e) { 6 // 例外オブジェクトからエラーが発生した行番号を取得します 7 $line = $e->getLine(); 8 echo "エラーが発生した行番号: " . $line; 9} 10?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
このメソッドは、JSONデコードエラーが発生した行番号を整数で返します。
サンプルコード
PHP JsonException getLine でエラー行番号を取得する
1<?php 2 3/** 4 * JsonExceptionからエラーが発生した行番号を取得するサンプルコード 5 * 6 * 不正なJSON文字列をデコードしようとすると JsonException がスローされます。 7 * catchブロックで例外を捕捉し、getLine() メソッドを使って、 8 * 例外がスローされたソースコード上の行番号を取得します。 9 */ 10function demonstrateJsonExceptionGetLine(): void 11{ 12 // 構文エラーを持つ不正なJSON文字列(末尾に余分なカンマ) 13 $invalidJsonString = '{"product": "Sample", "version": 1.0,}'; 14 15 try { 16 // PHP 8以降、JSON_THROW_ON_ERRORフラグを指定すると、 17 // JSONのエンコード/デコードエラー時に JsonException がスローされる 18 // この行で例外が発生する 19 json_decode($invalidJsonString, flags: JSON_THROW_ON_ERROR); 20 21 echo "JSONの解析に成功しました。" . PHP_EOL; 22 } catch (JsonException $e) { 23 // スローされたJsonExceptionオブジェクトを捕捉する 24 25 // getLine()メソッドを呼び出し、例外が発生した行番号を取得して表示 26 echo "エラーメッセージ: " . $e->getMessage() . PHP_EOL; 27 echo "エラーコード: " . $e->getCode() . PHP_EOL; 28 echo "エラーが発生したファイル: " . $e->getFile() . PHP_EOL; 29 echo "エラーが発生した行番号: " . $e->getLine() . PHP_EOL; 30 } 31} 32 33// 関数を実行して動作を確認 34demonstrateJsonExceptionGetLine();
PHPの JsonException::getLine() メソッドは、JSON関連の処理でエラーが発生した際に、そのエラーがソースコードのどの行で発生したかを示す行番号を取得するためのものです。このメソッドは JsonException オブジェクトから呼び出され、引数は必要ありません。戻り値として、エラーが発生した行番号を整数(int)で返します。
サンプルコードでは、まず構文エラーを含む不正なJSON文字列を用意しています。次に、try ブロック内で json_decode() 関数を JSON_THROW_ON_ERROR フラグ付きで実行します。このフラグを指定すると、JSONのデコードに失敗した場合に JsonException という種類の例外がスロー(発生)されます。このコードでは不正なJSONを扱っているため、json_decode() の行で例外が発生します。
catch ブロックでは、スローされた JsonException オブジェクトを $e という変数で捕捉(受け取り)します。そして、$e->getLine() を呼び出すことで、例外が発生した具体的な行番号を取得し、画面に出力しています。この機能により、開発者はエラーの原因となったコードの位置を迅速に特定でき、デバッグ作業を効率的に進めることが可能になります。
getLine()メソッドは、JSON文字列内のエラー箇所の行番号ではなく、PHPコード上で例外がスローされた行(この例ではjson_decode()関数)の番号を返します。この違いを理解しておくことが重要です。この例外処理を有効にするには、json_decode()の引数にJSON_THROW_ON_ERRORフラグを必ず指定する必要があります。このフラグがないとJsonExceptionは発生せず、getLine()を呼び出すこともできません。PHP 8以降では、try...catchブロックでJSONエラーを捕捉する方法が標準的です。エラー発生箇所の特定を容易にするため、getFile()やgetMessage()と組み合わせてログに記録すると、デバッグが効率的になります。