【PHP8.x】codeプロパティの使い方

codeプロパティの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

codeプロパティは、ErrorExceptionクラスにおいて、発生したエラーの種類を示す数値コードを保持するプロパティです。

ErrorExceptionクラスは、PHPの通常の警告や通知といった標準エラーを、プログラム内で例外として捕捉し処理するための特殊な例外クラスです。PHPは通常、エラーが発生してもスクリプトの実行を停止せず、警告や通知を発するに留まりますが、set_error_handler関数を用いて設定することにより、これらのPHPエラーをErrorExceptionのインスタンスとしてスローし、try-catchブロックで例外として扱うことが可能になります。

このcodeプロパティには、E_WARNINGE_NOTICEE_USER_ERRORなどのPHPのエラー定数に対応する整数値が格納されます。これにより、開発者はtry-catchブロックでErrorExceptionを捕捉した際に、どの種類のエラーが発生したのかをcodeプロパティの値で正確に判別することができます。この情報を用いることで、アプリケーション内でエラーの種類に応じた具体的なエラー処理(例えば、エラーメッセージの表示、ログへの記録、特定の処理の中止など)を柔軟に実装することが可能となり、より堅牢なプログラム開発に役立ちます。

構文(syntax)

1<?php
2$errorException = new ErrorException("エラーメッセージの例", 500);
3$errorCode = $errorException->code;
4?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

このプロパティは、例外の原因となったエラーコードを表す整数値を返します。

サンプルコード

PHP ErrorExceptionのcodeプロパティとCodeIgniterでのエラー表示

1<?php
2
3namespace App\Libraries;
4
5use CodeIgniter\Exceptions\PageNotFoundException;
6
7class ErrorHandler
8{
9    /**
10     * エラーコードに基づいて、カスタムエラーページを表示します。
11     *
12     * @param int $code HTTPステータスコード
13     *
14     * @return string HTMLコンテンツ
15     */
16    public function displayErrorPage(int $code): string
17    {
18        switch ($code) {
19            case 404:
20                // 404エラーページのパスを設定します。
21                $viewPath = 'errors/404_error';
22                break;
23            case 500:
24                // 500エラーページのパスを設定します。
25                $viewPath = 'errors/500_error';
26                break;
27            default:
28                // デフォルトのエラーページのパスを設定します。
29                $viewPath = 'errors/default_error';
30                break;
31        }
32
33        // CodeIgniterビューローダーを使用してエラーページを読み込みます。
34        $view = \Config\Services::renderer();
35
36        try {
37            return $view->render($viewPath, ['code' => $code]);
38        } catch (\Exception $e) {
39            // ビューファイルが存在しない場合、例外をキャッチし、デフォルトメッセージを表示します。
40            return "<h1>エラーが発生しました。</h1><p>エラーコード: {$code}</p>";
41        }
42    }
43
44    /**
45     *  PageNotFoundException を throw するサンプル
46     *
47     *  @throws PageNotFoundException
48     */
49    public function throwNotFoundException(): void
50    {
51        throw new PageNotFoundException("指定されたページが見つかりません。");
52    }
53}
54
55// 使用例:
56// $errorHandler = new ErrorHandler();
57// echo $errorHandler->displayErrorPage(404); // 404エラーページを表示
58// try {
59//   $errorHandler->throwNotFoundException();
60// } catch (PageNotFoundException $e) {
61//   echo "例外がキャッチされました: " . $e->getMessage();
62// }

このサンプルコードは、PHPとCodeIgniterフレームワークを使用して、カスタムエラーページを表示するためのErrorHandlerクラスを定義しています。ErrorHandlerクラスは、HTTPステータスコードを受け取り、それに基づいて適切なエラーページをレンダリングするdisplayErrorPageメソッドを持っています。

displayErrorPageメソッドは、引数として整数型の$code(HTTPステータスコード)を受け取ります。この$codeの値に応じて、異なるエラーページのビューファイルが選択されます。例えば、$codeが404の場合、errors/404_errorというビューファイルが読み込まれます。CodeIgniterのビューローダーを利用して、指定されたビューファイルをレンダリングし、HTMLコンテンツを文字列として返します。もしビューファイルが存在しないなどの理由で例外が発生した場合は、エラーメッセージを表示します。

また、throwNotFoundExceptionメソッドは、PageNotFoundExceptionをスローする例を示しています。これは、指定されたページが見つからない場合に例外を発生させるために使用されます。try-catchブロックを使用することで、この例外を捕捉し、エラーメッセージを表示できます。

このコードは、Webアプリケーションにおけるエラーハンドリングの基本的な方法を示しており、システムエンジニアを目指す初心者にとって、エラー処理の概念を理解するための良い出発点となります。特に、CodeIgniterフレームワークにおけるビューのレンダリングや例外処理の方法を学ぶことができます。

このサンプルコードは、CodeIgniter4フレームワークにおけるカスタムエラーハンドリングの例です。ErrorExceptionクラスのcodeプロパティ(エラーコード)をdisplayErrorPageメソッド内で利用し、HTTPステータスコードに基づいて適切なエラーページを表示しています。

注意点として、viewPath変数の設定は、実際のビューファイルパスと一致させる必要があります。また、try-catchブロックでビューのレンダリングエラーを捕捉し、代替メッセージを表示することで、ビューファイルが存在しない場合でもエラーを適切に処理しています。throwNotFoundExceptionメソッドは、PageNotFoundExceptionをスローする例を示しており、例外処理の基本を理解するのに役立ちます。例外処理を適切に行うことで、予期せぬエラー発生時にもプログラムが停止せず、安定性を高めることができます。

ErrorExceptionのcodeプロパティを取得する

1<?php
2
3/**
4 * ErrorException の code プロパティの例
5 *
6 * PHP_CodeSniffer を使用してコーディング規約を確認することを推奨します。
7 */
8try {
9    // 意図的にエラーを発生させる
10    trigger_error("This is a test error.", E_USER_WARNING);
11} catch (ErrorException $e) {
12    // ErrorException オブジェクトからエラーコードを取得
13    $errorCode = $e->getCode();
14
15    // エラーコードを表示
16    echo "Error Code: " . $errorCode . PHP_EOL;
17
18    // エラーメッセージを表示
19    echo "Error Message: " . $e->getMessage() . PHP_EOL;
20}

ErrorExceptionクラスのcodeプロパティは、発生したエラーのエラーコード(整数値)を保持します。このプロパティは、例外オブジェクトを通じてエラーの種類を識別するために使用されます。サンプルコードでは、trigger_error()関数を使用して意図的にE_USER_WARNINGレベルのエラーを発生させています。このエラーはErrorExceptionとしてキャッチされ、キャッチされた例外オブジェクトのgetCode()メソッドを呼び出すことで、エラーコードを取得しています。getCode()メソッドは引数を取らず、エラーコードの整数値を返します。取得したエラーコードは、echoステートメントによってコンソールに出力されます。このようにcodeプロパティを利用することで、発生したエラーの種類をプログラム上で判別し、適切なエラーハンドリングを行うことが可能になります。

なお、サンプルコード内には、PHP_CodeSnifferの使用を推奨するコメントが含まれています。PHP_CodeSnifferは、PHPのコーディング規約をチェックするためのツールであり、一貫性のあるコードスタイルを維持するために役立ちます。ErrorExceptionのcodeプロパティの利用と合わせて、PHP_CodeSnifferなどのツールを活用することで、より質の高いコードを作成できます。

ErrorExceptionのcodeプロパティは、発生したエラーの種類を示す整数値を返します。この値は、trigger_errorなどで指定したエラーレベル(E_USER_WARNINGなど)とは異なる点に注意が必要です。getErrorメソッドで取得できるエラーメッセージと合わせて、エラーの原因特定に役立てることができます。

サンプルコードでは、trigger_error関数で意図的にエラーを発生させていますが、実際のエラー処理では、より複雑な状況に対応する必要があるかもしれません。また、PHP_CodeSnifferを使用することで、コーディング規約に沿ったコードを記述し、可読性や保守性を向上させることができます。エラー処理とコーディング規約を意識することで、より安全で安定したプログラムを作成できます。

関連コンテンツ