PHPのErrorExceptionクラスとは?エラーハンドリングの基本と実装例を解説
はじめに
PHPのExceptionクラスは、Throwableインターフェースを実装しています。そして、ErrorExceptionクラスはこのExceptionクラスを継承したクラスです。
ErrorExceptionは、本来であれば無視されてしまうエラー(NoticeやWarningなど)を捕捉して処理したい場合に、明示的にスローするために用意されています。これにより、PHPの標準的なエラー報告の仕組みを例外処理の仕組みに統合することができます。
PHPの定義済みエラー定数
PHPのコアには、以下のような定義済みエラー定数が用意されています。ErrorExceptionのseverity(重大度)は、これらの定数に関連付けられた整数値で表されます。
| 値 | 定数 | 説明 |
|---|---|---|
| 1 | E_ERROR | 致命的な実行時エラー。 |
| 2 | E_WARNING | 実行時の警告(致命的ではないエラー)。 |
| 4 | E_PARSE | コンパイル時のパースエラー。 |
| 8 | E_NOTICE | 実行時の通知。 |
| 16 | E_CORE_ERROR | PHPの初期起動時に発生する致命的なエラー。 |
| 32 | E_CORE_WARNING | PHPの初期起動時に発生する警告(致命的ではないエラー)。 |
| 64 | E_COMPILE_ERROR | 致命的なコンパイル時エラー。 |
| 128 | E_COMPILE_WARNING | コンパイル時の警告(致命的ではないエラー)。 |
| 256 | E_USER_ERROR | ユーザーが生成したエラーメッセージ。 |
| 512 | E_USER_WARNING | ユーザーが生成した警告メッセージ。 |
| 1024 | E_USER_NOTICE | ユーザーが生成した通知メッセージ。 |
| 2048 | E_STRICT | 有効にすると、コードの相互運用性と前方互換性を確保するための変更をPHPが提案します。 |
| 4096 | E_RECOVERABLE_ERROR | 捕捉可能な致命的なエラー。 |
| 8192 | E_DEPRECATED | 実行時の非推奨に関する通知。 |
| 16384 | E_USER_DEPRECATED | ユーザーが生成した非推奨に関する警告メッセージ。 |
| 32767 | E_ALL | E_STRICTを含むすべてのエラーと警告。 |
ErrorExceptionクラスのプロパティとメソッド
ErrorExceptionクラスは、Exceptionクラスから継承したプロパティやメソッドに加えて、以下の1つのプロパティと1つのメソッドを独自に持っています。
protected int severity ; final public getSeverity ( void ) : int
severityプロパティは例外の重大度を表し、その値は上記の表に示したエラーの種類に対応する整数値です。また、getSeverity()メソッドを使うことで、この重大度の値を取得することができます。
ErrorExceptionの実装例
次のスクリプトでは、ユーザー定義関数errhandlerをset_error_handler()関数によってエラーハンドラとして登録しています。このハンドラは、読み込み対象のファイルが見つからないという致命的なエラーが発生した際に、ErrorExceptionをスローします。
スローされた例外は、try-catchブロックで捕捉され、適切に処理される仕組みです。
サンプルコード
<?php
function errhandler($severity, $message, $file, $line) {
if (!(error_reporting() & $severity)) {
echo "no error";
return;
}
throw new ErrorException("Fatal Error:No such file or directory", 0, E_ERROR);
}
set_error_handler("errhandler");
/* 例外を発生させる */
try{
$data=file_get_contents("nofile.php");
echo $data;
}
catch (ErrorException $e){
echo $e->getMessage();
}
?>上記の例を実行すると、以下のような出力が表示されます。
出力結果
Fatal Error:No such file or directory
まとめ
ErrorExceptionクラスを活用することで、PHPの従来のエラー報告システム(NoticeやWarningなど)を例外処理のフローに組み込むことができます。set_error_handler()と組み合わせることで、エラーを一元的に管理し、try-catch構文による柔軟なエラーハンドリングが実現できます。堅牢なPHPアプリケーションを開発する際には、ぜひ活用したいクラスです。
-
0x80070057エラーの原因と解決方法を徹底解説
0x80070057エラーは、Windows UpdateやWindows Live Messengerのメールサービス利用時に発生することの多い、典型的なWindowsエラーです。このエラーメッセージが表示される場合、Windows Updateに問題があるか、特に「SoftwareDistribution」フォルダーに不具合が生じている可能性があります。また、Windows Live Messengerのメール機能からのエラーである場合は、送信トレイに送信できなかったメッセージが滞留していることが原因として考えられます。 エラーを根本的に解消し、PCを正常な状態に戻すためには、0x800
-
0x80070057エラーの原因と解決方法を徹底解説
「0x80070057エラー」は、Windows UpdateやWindows Live Messengerのメールサービス利用時に発生することが多い、代表的なWindowsのエラーコードです。Windows Updateでこのエラーが表示される場合は、「SoftwareDistribution」フォルダに問題が生じている可能性があります。また、Windows Live Messengerのメールで発生した場合は、送信トレイから送信できずに滞留しているメッセージが原因であることが多いです。エラーの根本原因を解消しない限り、エラーメッセージは繰り返し表示され続けます。本記事では、0x800700