PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのErrorExceptionクラスとは?エラーハンドリングの基本と実装例を解説

はじめに

PHPのExceptionクラスは、Throwableインターフェースを実装しています。そして、ErrorExceptionクラスはこのExceptionクラスを継承したクラスです。

ErrorExceptionは、本来であれば無視されてしまうエラー(NoticeやWarningなど)を捕捉して処理したい場合に、明示的にスローするために用意されています。これにより、PHPの標準的なエラー報告の仕組みを例外処理の仕組みに統合することができます。

PHPの定義済みエラー定数

PHPのコアには、以下のような定義済みエラー定数が用意されています。ErrorExceptionのseverity(重大度)は、これらの定数に関連付けられた整数値で表されます。

定数説明
1E_ERROR致命的な実行時エラー。
2E_WARNING実行時の警告(致命的ではないエラー)。
4E_PARSEコンパイル時のパースエラー。
8E_NOTICE実行時の通知。
16E_CORE_ERRORPHPの初期起動時に発生する致命的なエラー。
32E_CORE_WARNINGPHPの初期起動時に発生する警告(致命的ではないエラー)。
64E_COMPILE_ERROR致命的なコンパイル時エラー。
128E_COMPILE_WARNINGコンパイル時の警告(致命的ではないエラー)。
256E_USER_ERRORユーザーが生成したエラーメッセージ。
512E_USER_WARNINGユーザーが生成した警告メッセージ。
1024E_USER_NOTICEユーザーが生成した通知メッセージ。
2048E_STRICT有効にすると、コードの相互運用性と前方互換性を確保するための変更をPHPが提案します。
4096E_RECOVERABLE_ERROR捕捉可能な致命的なエラー。
8192E_DEPRECATED実行時の非推奨に関する通知。
16384E_USER_DEPRECATEDユーザーが生成した非推奨に関する警告メッセージ。
32767E_ALLE_STRICTを含むすべてのエラーと警告。

ErrorExceptionクラスのプロパティとメソッド

ErrorExceptionクラスは、Exceptionクラスから継承したプロパティやメソッドに加えて、以下の1つのプロパティと1つのメソッドを独自に持っています。

protected int severity ;
final public getSeverity ( void ) : int

severityプロパティは例外の重大度を表し、その値は上記の表に示したエラーの種類に対応する整数値です。また、getSeverity()メソッドを使うことで、この重大度の値を取得することができます。

ErrorExceptionの実装例

次のスクリプトでは、ユーザー定義関数errhandlerset_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アプリケーションを開発する際には、ぜひ活用したいクラスです。

  1. 0x80070057エラーの原因と解決方法を徹底解説

    0x80070057エラーは、Windows UpdateやWindows Live Messengerのメールサービス利用時に発生することの多い、典型的なWindowsエラーです。このエラーメッセージが表示される場合、Windows Updateに問題があるか、特に「SoftwareDistribution」フォルダーに不具合が生じている可能性があります。また、Windows Live Messengerのメール機能からのエラーである場合は、送信トレイに送信できなかったメッセージが滞留していることが原因として考えられます。 エラーを根本的に解消し、PCを正常な状態に戻すためには、0x800

  2. 0x80070057エラーの原因と解決方法を徹底解説

    「0x80070057エラー」は、Windows UpdateやWindows Live Messengerのメールサービス利用時に発生することが多い、代表的なWindowsのエラーコードです。Windows Updateでこのエラーが表示される場合は、「SoftwareDistribution」フォルダに問題が生じている可能性があります。また、Windows Live Messengerのメールで発生した場合は、送信トレイから送信できずに滞留しているメッセージが原因であることが多いです。エラーの根本原因を解消しない限り、エラーメッセージは繰り返し表示され続けます。本記事では、0x800700