【PHP8.x】JsonException::getCode()メソッドの使い方
getCodeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getCodeメソッドは、スローされたJsonExceptionオブジェクトから例外コードを取得するメソッドです。このメソッドは、PHPの基本的な例外クラスであるExceptionクラスから継承されたものです。JsonExceptionは、json_encode()関数やjson_decode()関数でJSON_THROW_ON_ERRORフラグが指定されている際に、JSONデータの処理中にエラーが発生するとスローされます。getCodeメソッドを呼び出すと、発生したエラーの種類を特定するための整数値が返されます。この返される値は、json_last_error()関数が返すエラーコード定数と一致しており、例えばJSONの構文エラーを示すJSON_ERROR_SYNTAXなどの定義済み定数と比較することが可能です。try-catchブロック内でこのメソッドを使用し、取得したエラーコードに応じて処理を分岐させることで、発生したJSONエラーの具体的な原因を判別し、それに応じた堅牢なエラーハンドリングを実装できます。
構文(syntax)
1<?php 2 3$invalidJson = '{ "key": "value", }'; // 不正なJSON文字列 4 5try { 6 json_decode($invalidJson, flags: JSON_THROW_ON_ERROR); 7} catch (JsonException $e) { 8 // 例外のエラーコードを取得します 9 $errorCode = $e->getCode(); 10 11 // JSON_ERROR_SYNTAX の値である 4 が出力されます 12 echo $errorCode; 13}
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
JsonException クラスの getCode メソッドは、JSON エンコードまたはデコード中に発生したエラーコードを整数型(int)で返します。
サンプルコード
JsonException::getCode()でエラーコードを取得する
1<?php 2 3/** 4 * json_decodeで発生したJsonExceptionからエラーコードを取得するサンプル関数 5 * 6 * わざと不正な形式のJSON文字列をデコードし、例外を発生させます。 7 * catchブロックでJsonExceptionオブジェクトを受け取り、 8 * getCode()メソッドを使ってエラーコード(整数)を取得・表示します。 9 */ 10function getJsonErrorCodeExample(): void 11{ 12 // 不正なJSON文字列(末尾に余分なカンマがあるため、構文エラーとなる) 13 $invalidJson = '{"name": "Taro", "age": 30,}'; 14 15 try { 16 // JSON_THROW_ON_ERRORフラグを指定することで、 17 // デコードエラー時にJsonExceptionがスローされるようになります。 18 json_decode($invalidJson, true, 512, JSON_THROW_ON_ERROR); 19 20 echo "JSONのデコードに成功しました。" . PHP_EOL; 21 } catch (JsonException $e) { 22 // JsonExceptionをキャッチします。 23 echo "JSONのデコード中にエラーが発生しました。" . PHP_EOL; 24 25 // getCode()メソッドで例外のエラーコードを取得します。 26 // このコードはjson_last_error()が返す定数値(例: JSON_ERROR_SYNTAXは4)に対応します。 27 $errorCode = $e->getCode(); 28 echo "エラーコード: " . $errorCode . PHP_EOL; 29 30 // 参考: getMessage()でエラーメッセージも取得できます。 31 $errorMessage = $e->getMessage(); 32 echo "エラーメッセージ: " . $errorMessage . PHP_EOL; 33 } 34} 35 36// 関数を実行して結果を確認します。 37getJsonErrorCodeExample(); 38
JsonException::getCode()は、JSONのエンコードまたはデコード処理でエラーが発生した際に、そのエラーの種類を特定するための整数コードを取得するメソッドです。このメソッドは引数を必要とせず、戻り値としてエラーの種類を示す整数 (int) を返します。この整数コードは、json_last_error()関数が返すPHPの定義済み定数(例: JSON_ERROR_SYNTAX は 4)に対応しています。
サンプルコードでは、末尾に不要なカンマが含まれる不正なJSON文字列をjson_decode()関数でデコードしようとしています。このとき、第4引数にJSON_THROW_ON_ERRORオプションが指定されているため、デコードに失敗するとJsonExceptionという例外が発生します。
プログラムはtry...catch構文でこの例外を捕捉し、catchブロック内で$e->getCode()を呼び出します。これにより、発生した例外オブジェクトから具体的なエラーコードを取得できます。この例では構文エラーが発生しているため、4という整数値が取得され、画面に出力されます。このように、getCode()を使用することで、エラーの種類に応じてプログラムの処理を分岐させるといったエラーハンドリングが可能になります。
json_decode関数でJsonExceptionからエラーコードを取得するには、第4引数にJSON_THROW_ON_ERRORを指定することが必須です。この指定がないと例外は発生せず、try-catch構文でエラーを捕捉できません。getCode()で得られる整数値は、json_last_error()が返すエラー定数(例:構文エラーを示すJSON_ERROR_SYNTAXなど)と同じです。この数値だけではエラー内容が分かりにくいため、getMessage()で取得できるエラーメッセージと合わせて確認すると、デバッグが容易になります。この機能はPHP 7.3以降で利用できます。
PHP JsonException::getCode() でエラーコードを取得する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * JsonException::getCode() の使用例を示します。 7 * 8 * 不正なJSON文字列をデコードしようとすると JsonException がスローされます。 9 * catchブロック内で、getCode() メソッドを呼び出して、 10 * json_last_error() が返すエラーコードと同じ値を取得できます。 11 */ 12function demonstrateJsonExceptionGetCode(): void 13{ 14 // わざと末尾にカンマを追加した、不正な形式のJSON文字列 15 $invalidJsonString = '{"product_id": 12345, "quantity": 1,}'; 16 17 try { 18 // JSON_THROW_ON_ERROR フラグを指定すると、デコードエラー時に例外がスローされる 19 json_decode($invalidJsonString, flags: JSON_THROW_ON_ERROR); 20 21 echo 'JSONのデコードに成功しました。' . PHP_EOL; 22 } catch (JsonException $e) { 23 // スローされた JsonException をキャッチ 24 echo 'JSONのデコード中にエラーが発生しました。' . PHP_EOL; 25 26 // getCode() メソッドでエラーコードを取得 27 $errorCode = $e->getCode(); 28 echo 'エラーコード: ' . $errorCode . PHP_EOL; 29 30 // getMessage() メソッドでエラーメッセージを取得 31 echo 'エラーメッセージ: ' . $e->getMessage() . PHP_EOL; 32 33 // 取得したエラーコードを、定義済みのJSONエラー定数と比較する 34 if ($errorCode === JSON_ERROR_SYNTAX) { 35 echo 'このエラーコードは構文エラー (JSON_ERROR_SYNTAX) を示しています。' . PHP_EOL; 36 } 37 } 38} 39 40// 関数を実行して動作を確認します 41demonstrateJsonExceptionGetCode();
JsonException::getCode() は、JSONのエンコードまたはデコード処理でエラーが発生した際に、そのエラーの種類を示すコードを取得するためのメソッドです。
このサンプルコードでは、まず json_decode() 関数に、わざと構文が間違っているJSON文字列を渡しています。このとき、flags 引数に JSON_THROW_ON_ERROR を指定しているため、デコードに失敗すると JsonException という種類の例外が発生(スロー)します。
プログラムは try...catch 構文を使い、エラーが発生する可能性のある処理を try ブロックで囲み、catch ブロックで発生した JsonException を捕捉しています。
catch ブロック内では、捕捉した例外オブジェクト $e に対して getCode() メソッドを呼び出しています。このメソッドは引数を取らず、エラーの原因を示す整数 (int) 型のコードを返します。この返される値は、PHPの json_last_error() 関数が返すエラーコードと同じものです。
最後に、取得したエラーコードをPHPの定義済み定数である JSON_ERROR_SYNTAX と比較することで、エラーが構文エラーであることを特定しています。このように、エラーコードを取得することで、プログラムはエラーの具体的な原因に応じた処理を行えるようになります。
JsonException::getCode()は、json_decode()関数でエラーが発生した際に、その原因を示すエラーコードを取得するためのメソッドです。この機能を利用するには、json_decode()の引数でJSON_THROW_ON_ERRORフラグを必ず指定する必要があります。この指定がないと例外は発生せず、getCode()も使えないため注意してください。取得したエラーコードは、JSON_ERROR_SYNTAXのようなPHPの定義済み定数と比較することで、エラーの種類を特定できます。エラーコードを直接数値で扱うのではなく、定数と比較することで、コードの可読性と保守性が向上します。getMessage()と併用すると、デバッグがより効率的になります。