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

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

作成日: 更新日:

基本的な使い方

severityプロパティは、ErrorExceptionオブジェクトが表すエラーの深刻度(エラーレベル)を整数値として保持するプロパティです。このプロパティは、PHPの標準的なエラー処理機構において発生する警告(E_WARNING)、通知(E_NOTICE)、ユーザー定義エラー(E_USER_ERROR)といった、様々な種類のエラーのレベルを識別するために使用されます。

ErrorExceptionクラスは、PHPが通常発生させるエラーや警告を、例外(Exception)として捕捉し、統一的に処理できるようにするために存在します。開発者はこのErrorExceptionを利用することで、従来のC言語スタイルで扱われていたエラーを、オブジェクト指向の例外処理の枠組みで管理できるようになります。

このseverityプロパティに格納される整数値は、error_reporting関数などで指定するPHPのエラーレベル定数に対応しており、例えばE_WARNINGであれば2、E_NOTICEであれば8といった値が設定されます。これにより、捕捉したErrorExceptionオブジェクトがどのような種類のエラーを表しているのかをプログラム上で簡単に判別できます。例えば、特定の警告レベルのエラーだけをログに出力し、より深刻なエラーの場合にはユーザーに通知するといった、柔軟なエラーハンドリングロジックを実装する際に、このseverityプロパティが重要な役割を果たします。開発者はこの値を確認することで、エラーの種類に応じた適切な対応を決定し、システムの安定性と信頼性を高めることができます。

構文(syntax)

1<?php
2// ErrorExceptionのインスタンスを生成(または既存のものを取得)
3$errorException = new ErrorException('エラーメッセージ', 0, E_WARNING, __FILE__, __LINE__);
4
5// severityプロパティにアクセスして、エラーの深刻度を取得
6$errorSeverity = $errorException->severity;
7?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

このプロパティは、例外が発生した際の深刻度を示す整数値を返します。

サンプルコード

PHP ErrorException severity 8192 を取得する

1<?php
2
3// ErrorException クラスの severity プロパティの例
4try {
5    // E_USER_NOTICE を発生させる
6    trigger_error("これはユーザー定義の通知です。", E_USER_NOTICE);
7} catch (ErrorException $e) {
8    // ErrorException がキャッチされた場合、severity プロパティの値を出力する
9    echo "エラーの重要度: " . $e->severity . PHP_EOL;
10
11    // severity プロパティの値が 8192 (E_USER_NOTICE) であるか確認
12    if ($e->severity === E_USER_NOTICE) {
13        echo "エラーの重要度は E_USER_NOTICE (8192) です。" . PHP_EOL;
14    }
15}
16
17?>

このサンプルコードは、PHP 8における ErrorException クラスの severity プロパティの使い方を示しています。ErrorException は、PHPのエラーを例外として扱うためのクラスです。

まず、trigger_error() 関数を使用して、E_USER_NOTICE レベルのユーザー定義のエラーを発生させています。このエラーは try-catch ブロックで ErrorException としてキャッチされます。

ErrorException オブジェクトの severity プロパティは、発生したエラーの重要度を表す整数値です。この例では、E_USER_NOTICE が発生しているため、$e->severityE_USER_NOTICE に対応する値、つまり 8192 を持ちます。

サンプルコードでは、echo "エラーの重要度: " . $e->severity . PHP_EOL; によって、この重要度を出力しています。

さらに、if ($e->severity === E_USER_NOTICE) という条件分岐によって、severity プロパティの値が E_USER_NOTICE (8192) であるかどうかを確認し、その結果に応じてメッセージを出力しています。

このように、severity プロパティを参照することで、発生したエラーの種類をプログラム内で判別し、適切な処理を行うことができます。システムエンジニアを目指す上で、エラーの種類に応じた処理を記述することは重要です。

ErrorExceptionオブジェクトのseverityプロパティは、発生したエラーの種類を示す整数値です。trigger_error()関数で発生させたエラーの種類(例えばE_USER_NOTICE)が格納されます。

サンプルコードでは、$e->severityでエラーの種類を取得し、E_USER_NOTICE定数と比較しています。数値8192を直接比較しても同じ結果が得られますが、可読性のために定数を使用する方が推奨されます。

trigger_error()を使用する際は、エラーハンドラが設定されているか確認してください。設定されていない場合、エラーは表示されるだけで、ErrorExceptionはスローされません。また、error_reporting設定で、E_USER_NOTICEのようなユーザー定義のエラーが表示されるように設定されているか確認が必要です。

PHP ErrorExceptionのseverityを取得する

1<?php
2
3// エラーハンドラ関数を定義します。
4function errorHandler(int $severity, string $message, string $file, int $line): bool
5{
6    if (error_reporting() & $severity) {
7        // ErrorException をスローします。
8        throw new ErrorException($message, 0, $severity, $file, $line);
9    }
10
11    // PHP の組み込みエラーハンドラを実行しません。
12    return true;
13}
14
15// エラーハンドラを設定します。
16set_error_handler('errorHandler');
17
18try {
19    // 意図的に警告を発生させます。
20    $result = 10 / 0; // Warning: Division by zero
21
22} catch (ErrorException $e) {
23    // ErrorException をキャッチし、severity プロパティの値を取得します。
24    echo "Caught ErrorException: " . $e->getMessage() . PHP_EOL;
25    echo "Severity: " . $e->severity . PHP_EOL;
26} finally {
27    // エラーハンドラをリセットします。
28    restore_error_handler();
29}
30
31?>

このPHPのサンプルコードは、ErrorExceptionクラスのseverityプロパティの役割を示すものです。 ErrorExceptionは、PHPのエラーを例外として扱うためのクラスです。

まず、set_error_handler()関数を使って、独自のエラーハンドラ関数errorHandler()を登録します。この関数は、PHPがエラーを検出した際に呼び出されます。 errorHandler()内では、エラーの種類($severity)に基づいてErrorExceptionをスローしています。$severity引数には、発生したエラーの種類を表す整数値が渡されます。(例:E_WARNING, E_NOTICE

try...catchブロックの中で、意図的にゼロ除算を行い警告を発生させます。この警告は、設定したエラーハンドラによってErrorExceptionとしてキャッチされます。

catchブロック内では、キャッチしたErrorExceptionオブジェクトのseverityプロパティにアクセスしています。$e->severityとすることで、例外が発生した際のエラーレベル(severity)の値を取得できます。severityプロパティは整数値を返し、発生したエラーの種類(警告、通知など)を示します。

最後に、restore_error_handler()関数を使って、エラーハンドラをデフォルトの状態に戻します。これは、スクリプトの他の部分に影響を与えないようにするためです。 このサンプルコードは、エラーハンドリングの基本的な流れと、ErrorExceptionオブジェクトが保持するエラーレベル情報をseverityプロパティを通じて取得する方法を示しています。

ErrorExceptionのseverityプロパティは、発生したエラーの種類(警告、注意、エラーなど)を示す整数値です。この値は、error_reporting()関数で設定されたエラーレベルと組み合わせて、特定のエラーを処理するかどうかを判断するために使用されます。

サンプルコードでは、カスタムエラーハンドラ内でErrorExceptionがスローされ、severityプロパティの値が出力されています。ErrorExceptionをキャッチする際には、このseverityプロパティを参考に、エラーの種類に応じた適切な処理を実装できます。

restore_error_handler()は、スクリプトの最後にエラーハンドラをリセットするために重要です。リセットしない場合、以降の処理に影響を与える可能性があります。

関連コンテンツ