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

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

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

作成日: 更新日:

基本的な使い方

getCodeメソッドは、PHPの内部で定義されているThrowableインターフェースに属し、例外やエラーが発生した際に、それらに関連付けられた数値コードを取得するために実行するメソッドです。

PHP 8を含む現代のPHPアプリケーションにおいて、プログラムの実行中に発生した問題は、Throwableインターフェースを実装するオブジェクトとして表現されます。このgetCode()メソッドは、捕捉された例外オブジェクト(Exceptionクラスとその派生クラス)やエラーオブジェクト(Errorクラスとその派生クラス)が保持する、エラーの種類を識別するための数値コードを取り出す役割を担います。

具体的には、try-catchブロックを用いて例外やエラーを捕捉した場合に、捕捉したオブジェクトに対してこのメソッドを呼び出すことで、問題の種類を表す整数値を取得できます。このコードは、エラーメッセージのように人間が詳細を読み解くための情報とは異なり、プログラムがエラーの種類を判別し、その種類に応じて異なる回復処理やエラーログの記録、ユーザーへの通知方法などを自動的に判断・実行するために利用されます。

例えば、開発者が独自に定義したカスタム例外クラスを作成する際には、コンストラクタで任意の整数値をエラーコードとして設定できます。これにより、アプリケーション固有のエラーを細かく分類し、特定のコードに基づいて適切なエラーハンドリングを行うことが可能になります。PHPが内部的に発生させるエラーや標準の例外クラスの場合、多くはデフォルトで0が返されるか、特定の内部コードが割り当てられていることがあります。

getCodeメソッドは、発生した問題に対してプログラム的な識別子を提供し、アプリケーションの堅牢性を向上させるための重要なツールです。

構文(syntax)

1<?php
2$errorObject = new Exception("An error occurred", 123);
3$errorCode = $errorObject->getCode();

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

Throwableインターフェースで定義された例外コードを整数型で返します。

サンプルコード

PHP Exception getCode() で例外コードを取得する

1<?php
2
3/**
4 * カスタム例外クラスの定義。
5 * Exceptionクラスを継承することで、PHPの全ての例外・エラーの基底である
6 * Throwableインターフェースを自動的に実装します。
7 */
8class MyCustomException extends Exception
9{
10    /**
11     * MyCustomExceptionのコンストラクタ。
12     * 例外メッセージと数値コードを受け取り、親クラスに渡します。
13     *
14     * @param string $message 例外に関する説明メッセージ
15     * @param int $code 例外を一意に識別するための数値コード (デフォルトは0)
16     * @param Throwable|null $previous 以前に発生した例外オブジェクト (オプション)
17     */
18    public function __construct(string $message, int $code = 0, Throwable $previous = null)
19    {
20        // 親クラス(Exception)のコンストラクタを呼び出し、
21        // メッセージ、コード、そして以前の例外オブジェクトを設定します。
22        parent::__construct($message, $code, $previous);
23    }
24}
25
26echo "例外処理のデモンストレーションを開始します。\n";
27
28try {
29    // 例外を発生させる状況をシミュレートします。
30    // ここでは、特定のコード(例えば、データベースエラーコード5001)を持つ
31    // MyCustomExceptionを意図的にスローしています。
32    $errorCodeForDatabase = 5001;
33    $errorMessage = "データベースへの接続に失敗しました。";
34    throw new MyCustomException($errorMessage, $errorCodeForDatabase);
35
36} catch (MyCustomException $e) {
37    // MyCustomException型の例外がキャッチされた場合
38    echo "\n--- カスタム例外がキャッチされました ---\n";
39    echo "メッセージ: " . $e->getMessage() . "\n";
40    // Throwable::getCode() メソッドを使用して、例外に設定された数値コードを取得します。
41    echo "取得した例外コード: " . $e->getCode() . "\n";
42    echo "発生ファイル: " . $e->getFile() . " (行: " . $e->getLine() . ")\n";
43
44} catch (Throwable $e) {
45    // それ以外の、MyCustomException以外の全てのThrowable(エラーや他の例外)がキャッチされた場合
46    // 例外処理の最後のcatchブロックとして汎用的に利用できます。
47    echo "\n--- 予期せぬエラーがキャッチされました ---\n";
48    echo "メッセージ: " . $e->getMessage() . "\n";
49    // どんなThrowableオブジェクトに対しても getCode() メソッドは利用可能です。
50    echo "取得したエラーコード: " . $e->getCode() . "\n";
51    echo "発生ファイル: " . $e->getFile() . " (行: " . $e->getLine() . ")\n";
52}
53
54echo "\n例外処理のデモンストレーションを終了します。\n";
55

Throwable::getCode()は、PHPの例外やエラーの基盤となるThrowableインターフェースが提供するメソッドです。このメソッドは引数を受け取らず、例外発生時に設定された数値コードを整数型(int)で返します。プログラム中で例外をスローする際、その例外の種類や原因を数値で識別するためにコードを指定できます。例えば、データベース接続エラーには5001、ファイル読み込みエラーには5002のように、開発者が意味のあるコードを割り当てることが一般的です。

サンプルコードでは、MyCustomExceptionという独自の例外クラスを作成し、コンストラクタで数値コード5001を渡して例外を発生させています。catchブロック内で$e->getCode()を呼び出すことで、この5001という設定された例外コードを正確に取得し、画面に表示しています。

このコードを利用することで、キャッチした例外の種類を数値で判別し、その種類に応じた具体的なエラー処理(ログ出力の調整やユーザーへのメッセージ変更など)を実装することができます。Exceptionクラスを継承する全ての例外や、PHP 8で導入された各種エラーオブジェクトもThrowableインターフェースを実装しているため、このgetCode()メソッドが利用可能です。

サンプルコードの$e->getCode()は、例外オブジェクトが生成される際に設定された数値コードを取得するメソッドです。このコードは、例外の種類を識別したり、エラー処理のロジックを詳細に分岐させたりするのに役立ちます。Throwableインターフェースを実装する全てのオブジェクトで利用できるため、カスタム例外だけでなく、PHPの組み込み例外やエラーに対しても一貫してコードを取得できます。例外オブジェクト生成時にコードを指定しなかった場合や、PHP内部のエラーでコードが設定されていない場合は0が返されることがありますので、0の場合の処理も考慮したエラーハンドリングを検討してください。戻り値は常に整数型です。

PHP Throwable getCodeでエラーコードを取得する

1<?php
2
3/**
4 * Throwable::getCode() メソッドの使用例を示します。
5 * このメソッドは、例外やエラーに関連付けられたコード(整数値)を取得するために使用されます。
6 */
7function demonstrateGetCode(): void
8{
9    try {
10        // 意図的に例外をスローします。
11        // Exception コンストラクタの第2引数に、任意の数値コードを指定します。
12        $customErrorCode = 500;
13        throw new Exception("ファイルが見つかりません。", $customErrorCode);
14
15    } catch (Throwable $e) {
16        // Throwable インターフェースを実装する全ての例外やエラーを捕捉します。
17        // Throwable::getCode() メソッドを呼び出して、例外コードを取得します。
18        $retrievedCode = $e->getCode();
19
20        echo "例外が捕捉されました。\n";
21        echo "取得されたエラーコード: " . $retrievedCode . "\n";
22        echo "エラーメッセージ: " . $e->getMessage() . "\n";
23        echo "例外が発生したファイル: " . $e->getFile() . "\n";
24        echo "例外が発生した行: " . $e->getLine() . "\n";
25
26        // 捕捉したコードが、スロー時に指定したカスタムコードと一致するか確認できます。
27        if ($retrievedCode === $customErrorCode) {
28            echo "カスタムエラーコードが正しく取得されました。\n";
29        }
30    }
31}
32
33// 関数を実行して動作を確認します。
34demonstrateGetCode();
35

PHP 8で提供されるThrowable::getCode()メソッドは、プログラムの実行中に発生した例外やエラーに、開発者が任意で関連付けた数値コードを取得するために使用されます。このメソッドは引数を必要とせず、例外やエラーオブジェクトから直接呼び出すことで、関連する整数値(int)を戻り値として返します。

提供されたサンプルコードでは、try-catchブロックを使用してこの動作を示しています。まずtryブロック内で、Exceptionクラスのコンストラクタの第2引数に500というカスタムエラーコードを指定して、意図的に例外をスローしています。これにより、「ファイルが見つかりません。」というメッセージとともに、特定の数値コードを持つ例外が発生します。

次に、catch (Throwable $e)ブロックでこの例外を捕捉します。捕捉された例外オブジェクト$eに対して$e->getCode()を呼び出すことで、スロー時に指定した500という整数値が$retrievedCode変数に格納されます。この取得されたコードは画面に表示され、スロー時に指定したカスタムコードと一致していることが確認できます。

このようにgetCode()メソッドは、発生した例外の種類や状況を数値で識別し、それに応じたエラー処理をプログラム内で分岐させる際に非常に役立ちます。システムエンジニアにとって、エラーハンドリングを効率的に行うための基本的なツールの一つです。

getCode()メソッドは、例外発生時に設定された数値コードを整数(int)で取得します。このコードはExceptionクラスのコンストラクタの第2引数で任意に指定でき、指定がない場合は通常0となります。ThrowableはPHP 7以降で導入されたインターフェースであり、全ての例外(Exception)とエラー(Error)の共通の基底であるため、catch (Throwable $e)とすることで、あらゆる種類のエラーや例外を捕捉し、コードを取得できます。取得したコードは、エラーの種類を識別し、その後の処理を分岐させるための重要な情報として利用できますが、エラーメッセージ(getMessage())とは別物ですので、使い分けに注意してください。

関連コンテンツ