PHP-エラーと例外処理

エラー処理は、プログラムによって発生したエラーをキャッチし、適切なアクションを実行するプロセスです。エラーを適切に処理すると、予期しない結果が多数発生する可能性があります。

PHPではエラーを処理するのは非常に簡単です。

die()関数の使用

PHPプログラムを作成するときは、先に進む前に考えられるすべてのエラー状態を確認し、必要に応じて適切なアクションを実行する必要があります。

次の例を使用せずに試してください /tmp/test.xt ファイルとこのファイルで。

<?php
   if(!file_exists("/tmp/test.txt")) {
      die("File not found");
   }else {
      $file = fopen("/tmp/test.txt","r");
      print "Opend file sucessfully";
   }
   // Test of the code here.
?>

このようにして、効率的なコードを書くことができます。上記の手法を使用すると、エラーが発生したときにプログラムを停止して、より意味のあるユーザーフレンドリーなメッセージを表示できます。

カスタムエラー処理関数の定義

エラーを処理するための独自の関数を作成できます。PHPは、エラー処理関数を定義するためのフレームワークを提供します。

この関数は、少なくとも2つのパラメーター(エラーレベルとエラーメッセージ)を処理できる必要がありますが、最大5つのパラメーター(オプションで、ファイル、行番号、およびエラーコンテキスト)を受け入れることができます。

構文

error_function(error_level,error_message, error_file,error_line,error_context);

シニア番号 パラメータと説明
1

error_level

必須-ユーザー定義エラーのエラーレポートレベルを指定します。値の数値である必要があります。

2

error_message

必須-ユーザー定義エラーのエラーメッセージを指定します

3

error_file

オプション-エラーが発生したファイル名を指定します

4

error_line

オプション-エラーが発生した行番号を指定します

5

error_context

オプション-エラーが発生したときに使用されていたすべての変数とその値を含む配列を指定します

考えられるエラーレベル

これらのエラーレポートレベルは、ユーザー定義のエラーハンドラーを使用できるさまざまなタイプのエラーです。これらの値は、を使用して組み合わせて使用​​されます| オペレーター

シニア番号 定数と説明
1

.E_ERROR

致命的な実行時エラー。スクリプトの実行が停止します

1
2

E_WARNING

致命的ではない実行時エラー。スクリプトの実行は停止されません

2
3

E_PARSE

コンパイル時の解析エラー。解析エラーは、パーサーによってのみ生成される必要があります。

4
4

E_NOTICE

実行時の通知。スクリプトはエラーの可能性があるものを検出しましたが、スクリプトを正常に実行しているときにも発生する可能性があります

8
5

E_CORE_ERROR

PHPの最初の起動時に発生する致命的なエラー。

16
6

E_CORE_WARNING

致命的ではない実行時エラー。これは、PHPの最初の起動時に発生します。

32
7

E_USER_ERROR

致命的なユーザー生成エラー。これは、PHP関数trigger_error()を使用してプログラマーが設定したE_ERRORのようなものです。

256
8

E_USER_WARNING

致命的ではないユーザー生成の警告。これは、PHP関数trigger_error()を使用してプログラマーが設定したE_WARNINGのようなものです。

512
9

E_USER_NOTICE

ユーザーが生成した通知。これは、PHP関数trigger_error()を使用してプログラマーが設定したE_NOTICEのようなものです。

1024
10

E_STRICT

実行時の通知。最高の相互運用性とコードの上位互換性を保証するコードへの変更をPHPに提案させることができます。

2048
11

E_RECOVERABLE_ERROR

キャッチ可能な致命的なエラー。これはE_ERRORに似ていますが、ユーザー定義のハンドルでキャッチできます(set_error_handler()も参照)。

4096
12

E_ALL

レベルE_STRICTを除くすべてのエラーと警告(E_STRICTはPHP 6.0以降E_ALLの一部になります)

8191

上記のすべてのエラーレベルは、次のPHP組み込みライブラリ関数を使用して設定できます。レベルcabは、上記の表で定義されている値のいずれかです。

int error_reporting ( [int $level] )

以下は、1つのエラー処理関数を作成する方法です-

<?php
   function handleError($errno, $errstr,$error_file,$error_line) {
      echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
      echo "<br />";
      echo "Terminating PHP Script";
      
      die();
   }
?>

カスタムエラーハンドラーを定義したら、PHP組み込みライブラリを使用して設定する必要があります set_error_handler関数。次に、存在しない関数を呼び出して、例を調べてみましょう。

<?php
   error_reporting( E_ERROR );
   
   function handleError($errno, $errstr,$error_file,$error_line) {
      echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
      echo "<br />";
      echo "Terminating PHP Script";
      
      die();
   }
   
   //set error handler
   set_error_handler("handleError");
   
   //trigger error
   myFunction();
?>

例外処理

PHP 5には、他のプログラミング言語と同様の例外モデルがあります。例外は重要であり、エラー処理をより適切に制御できます。

例外に関連する新しいキーワードについて説明しましょう。

  • Try−例外を使用する関数は、「try」ブロックにある必要があります。例外がトリガーされない場合、コードは通常どおり続行されます。ただし、例外がトリガーされると、例外は「スロー」されます。

  • Throw−これは例外をトリガーする方法です。各「スロー」には、少なくとも1つの「キャッチ」が必要です。

  • Catch −「catch」ブロックは例外を取得し、例外情報を含むオブジェクトを作成します。

例外がスローされると、ステートメントに続くコードは実行されず、PHPは最初に一致するcatchブロックを見つけようとします。例外がキャッチされない場合、PHPの致命的なエラーが「UncaughtException .. ..

  • PHP内で例外をスローし、キャッチ(「キャッチ」)することができます。コードはtryブロックで囲まれている場合があります。

  • 各試行には、対応するキャッチブロックが少なくとも1つ必要です。複数のcatchブロックを使用して、さまざまなクラスの例外をキャッチできます。

  • 例外は、catchブロック内でスロー(または再スロー)できます。

以下はコードの一部です。このコードをコピーしてファイルに貼り付け、結果を確認します。

<?php
   try {
      $error = 'Always throw this error';
      throw new Exception($error);
      
      // Code following an exception is not executed.
      echo 'Never executed';
   }catch (Exception $e) {
      echo 'Caught exception: ',  $e->getMessage(), "\n";
   }
   
   // Continue execution
   echo 'Hello World';
?>

上記の例では、$ e-> getMessage関数を使用してエラーメッセージを取得しています。から使用できる以下の機能がありますException クラス。

  • getMessage() −例外のメッセージ

  • getCode() −例外のコード

  • getFile() −ソースファイル名

  • getLine() −ソースライン

  • getTrace() − backtrace()のn配列

  • getTraceAsString() −フォーマットされたトレースの文字列

カスタム例外ハンドラーの作成

独自のカスタム例外ハンドラーを定義できます。次の関数を使用して、ユーザー定義の例外ハンドラー関数を設定します。

string set_exception_handler ( callback $exception_handler )

ここに exception_handlerキャッチされない例外が発生したときに呼び出される関数の名前です。この関数は、set_exception_handler()を呼び出す前に定義する必要があります。

<?php
   function exception_handler($exception) {
      echo "Uncaught exception: " , $exception->getMessage(), "\n";
   }
	
   set_exception_handler('exception_handler');
   throw new Exception('Uncaught Exception');
   
   echo "Not Executed\n";
?>

PHPエラー処理関数でエラー処理関数の完全なセットを確認してください