PHPエラーと例外の処理~PHP TUTORIAL~: PHP入門 :

スポンサーリンク

本当にわからないとこがあった場合一人では解決できません。
『teratail』とはエンジニア特化型のQ&Aサイトです。 すべてのエンジニアさんが抱えている悩みを共有して 解決するための質問サイトです
無料なのでまずは登録して使ってみてください。メールアドレスだけで登録可能です ----------------------------------------------------------------------------------------

エンジニアによるエンジニアのためのサイト始まる!!【teratail】

エラー処理とは、プログラムで発生したエラーをキャッチし、適切な処置をとるプロセスです。エラーを適切に処理しないと予期しない多くの結果につながる可能性があります。

エラーを処理するための非常にシンプルなPHPです。

die()関数を使う

あなたのPHPプログラムを書く際には、先に進む前にすべてのエラー状態をチェックし、必要なときに適切な処置を取るべきです。

<?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);
Sr.No
1 error_level

必須 – ユーザー定義エラーのエラー報告レベルを指定します。値の数値でなければなりません。

2 error_message

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

3 error_file

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

4 error_line

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

5 error_context

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

考えられるエラーレベル

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

Sr.No 定数と説明
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組み込みライブラリ関数を使用して設定することができます。レベルは、上の表で定義された値のいずれかになります。

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致命的なエラーが “Uncaught Exception …”で発行されます

  • 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() - バックトレース()の配列
  • 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の正規表現

次のページ④PHP日付と時刻

スポンサーリンク

プログラミングは独学からは挫折の可能性が高いです。まずは無料体験ができる
コードキャンプが本当におすすめ。無料体験でわからないところを聞きましょう。
転職補助つき。カリキュラム終了後に転職紹介をしてくれます。