【PHP8.x】RuntimeException::getCode()メソッドの使い方
getCodeメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getCodeメソッドは、スローされたRuntimeExceptionオブジェクトの例外コードを取得するために実行するメソッドです。このメソッドは、PHPの基本的な例外クラスであるExceptionクラスから継承されており、RuntimeExceptionクラスでも同様に機能します。RuntimeExceptionは、プログラムの実行時にのみ発生するエラー、例えば外部リソースへのアクセス失敗といった、コンパイル時には検出できない問題を表現するために使用される例外です。例外を生成する際には、エラーメッセージと共に、そのエラーの種類を識別するための整数値を「例外コード」として設定することができます。このコードを利用することで、catchブロック内でエラーの種類に応じて処理を分岐させるなど、より詳細なエラーハンドリングが可能になります。tryブロックで発生したRuntimeExceptionをcatchブロックで捕捉し、その例外オブジェクトに対してgetCodeメソッドを呼び出すことで、設定された例外コードを取得します。もし例外オブジェクトの生成時にコードが明示的に指定されていない場合、このメソッドはデフォルトで0を返します。
構文(syntax)
1<?php 2 3try { 4 // 実行時エラーが発生した状況をシミュレートします。 5 // 第2引数に例外コード (例: 500) を指定して RuntimeException をスローします。 6 throw new RuntimeException("サーバーで予期せぬエラーが発生しました。", 500); 7} catch (RuntimeException $e) { 8 // スローされた例外をキャッチします。 9 10 // getCode() メソッドを使って、設定された例外コードを取得します。 11 $code = $e->getCode(); 12 13 // 取得した例外コードを出力します。 14 echo $code; // 500 が出力されます。 15} 16 17?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
int|string
このメソッドは、例外が発生した際に付与されたコードを整数型または文字列型で返します。
サンプルコード
RuntimeExceptionの例外コードを取得する
1<?php 2 3/** 4 * 外部APIからデータを取得する処理をシミュレートします。 5 * 6 * @param bool $simulateError 意図的にエラーを発生させるかどうか 7 * @return string 成功メッセージ 8 * @throws RuntimeException API接続に失敗した場合 9 */ 10function fetchDataFromApi(bool $simulateError): string 11{ 12 if ($simulateError) { 13 // 接続に失敗したと仮定し、RuntimeExceptionをスローします。 14 // コンストラクタの第2引数で、プログラムで識別可能な「例外コード」を設定します。 15 // ここでは、HTTPステータスコードに似た503をコードとして設定しています。 16 throw new RuntimeException('APIサービスが利用できません。', 503); 17 } 18 19 return 'データの取得に成功しました。'; 20} 21 22try { 23 // 例外が発生する可能性のある関数を呼び出します。 24 // true を渡して、意図的にエラーを発生させます。 25 $result = fetchDataFromApi(true); 26 echo $result . PHP_EOL; 27} catch (RuntimeException $e) { 28 // スローされたRuntimeExceptionを捕捉します。 29 echo 'エラーが発生しました。' . PHP_EOL; 30 31 // getMessage()で例外メッセージを取得して表示します。 32 echo 'メッセージ: ' . $e->getMessage() . PHP_EOL; 33 34 // getCode()で例外に設定された例外コードを取得して表示します。 35 // このコードを利用して、エラーの種類に応じた処理を振り分けることができます。 36 $code = $e->getCode(); 37 echo '例外コード: ' . $code . PHP_EOL; 38 39 // 取得したコードに基づいて処理を分岐させます。 40 if ($code === 503) { 41 echo 'サーバーがメンテナンス中の可能性があります。しばらくしてから再試行してください。' . PHP_EOL; 42 } 43}
RuntimeExceptionクラスのgetCodeメソッドは、例外(プログラム実行中に発生したエラー)に設定された、プログラムで識別可能な「例外コード」を取得するために使用します。このコードは、エラーの種類を識別するための数値や文字列です。
このサンプルコードでは、fetchDataFromApi関数の中で意.図的にRuntimeExceptionを発生させています。throw new RuntimeException('メッセージ', 503);のように、例外を発生させる際に第2引数として例外コード503を設定しています。
try...catch構文でこの例外を捕捉した後、catchブロック内で$e->getCode()を呼び出します。このメソッドは引数を必要とせず、例外オブジェクトに設定されていたコード、この場合は整数503を戻り値として返します。
取得した例外コードを利用することで、if ($code === 503) のように、エラーの種類に応じた条件分岐処理を実装できます。これにより、単にエラーが発生したという事実だけでなく、どのような種類のエラーなのかを判別し、より具体的で適切なエラー対応をプログラムで行うことが可能になります。
getCode()メソッドは、プログラムがエラーの種類を機械的に判断するための「例外コード」を取得します。例外を発生させる際にコンストラクタでコードを指定しないと、getCode()はデフォルトで整数の0を返します。このため、エラーコード0を意図的に使う場合は注意が必要です。取得したコードで処理を分岐させる際は、サンプルコードのように===による厳密な比較を行うと、型の違いによる意図しない一致を防げて安全です。例外コードには、HTTPステータスコードのようなチーム内でルール化された数値を用いると、コードの可読性と保守性が向上します。