PHPベストプラクティスの異常とエラー

3924 ワード

異常
1).例外はExceptionクラスのオブジェクトで、リモートAPIが応答していないか、データベースクエリが失敗したか、プログラムの実行の前置条件を満たすことができないなど、修復できない状況に遭遇したときに投げ出されます.問題が発生した場合、異常は自発的に出撃し、職責を委託するために使用される.異常は守備にも用いられ、潜在的な問題を予測して影響を軽減することができる.2).Exceptionオブジェクトは、他のPHPオブジェクトと同様にnewキーを使用してインスタンス化されます.

1番目のパラメータはメッセージで、2番目のパラメータはデジタルコードです.数値コードはオプションで、指定した例外にコンテキストを提供します.開示された例示的な方法getCodeおよびgetMessageを使用して、例外オブジェクトの2つの属性を得ることができる.3).異常が発生したり、現在の条件で操作できない場合は、異常を投げ出す必要があります.

4).Exceptionクラスまたはそのサブクラスを投げ出さなければなりません.PHPに内蔵されている異常クラスとそのサブクラスは以下の通りです.
  • Exception
  • ErrorException PHP標準ライブラリには、以下の追加のExceptionサブクラスが用意されており、PHP内蔵の例外クラスが拡張されています.
  • LogicException
  • BadFunctionCallException
  • BadMethodCallException

  • DomainException
  • InvalidArgumentException
  • LengthException
  • OutOfBoundsException
  • RuntimeException
  • OutOfBoundsException
  • OverflowException
  • RangeException
  • UnderflowException
  • UnexpectedValueException

  • 5).例外をキャプチャします.異常を予測してキャプチャして処理するのは、キャプチャされていない異常がPHPアプリケーションの実行を終了し、エラー情報を表示する可能性があるため、私たち自身の責任です.潜在的な異常をブロックして処理する方法は、try/catchブロックに異常を投げ出す可能性のあるコードを置くことである.
    try {
        $pdo = new PDO('mysql://host=wrong_host;dbname=wrong_name');
    } catch (PDOException $e) {
        $code = $e->getCode();
        $message = $e->getMessage();
        echo 'Something went wrong.Check back soon, please';
        exit;
    }
    

    複数の例外を連続的に放出することもできます
    try {
      throw new Exception('Not a PDO exception');
      $pdo = new PDO('mysql://host=wrong_host;dbname=wrong_name');
    } catch (PDOException $e) {
        echo 'Caught PDO exception';
    } catch (Exception $e) {
        //      
        echo 'Caught generic exception';
    } finally {
        //           
        echo 'Always do this';
    }
    

    ある異常をキャプチャするときは、1つのcatchブロックしか許可されません.PHPに適用可能なcatchブロックが見つからない場合は、PHPスクリプトが致命的なエラーで終了するまで、異常が上に泡が立ちます.6).例外ハンドラ.グローバルな例外ハンドラを使用して、取得されていないすべての例外をキャプチャできます.例外取得プログラムは、Exceptionタイプのパラメータを受け入れなければなりません.例外取得プログラムはset_を使用します.exception_handler()関数登録.

    エラー
    1).error_を使用できますReporting()関数またはphp.iniファイルでerror_を使用するReporting命令はPHPにそれらのエラーを報告または無視するように伝えます.どちらもE_*を使用しています定数で確定します.2)エラー報告方式四原則:
  • 必ずPHPにエラーを報告させる
  • 開発環境でエラーを表示する
  • 再生産環境でエラーを表示できない
  • 開発および生産環境においてエラーを記録する
  • 3)php.ini構成の例:開発環境:
    ;    
    display_startup_errors = On
    display_errors = On
    ;      
    error_reporting = -1
    ;     
    log_errors = On
    

    生産環境:
    ;     
    display_startup_errors = Off
    display_errors = Off
    ;       ,      
    error_reporting = E_ALL & ~E_NOTICE
    ;     
    log_errors = On
    

    4).グローバルエラーハンドラの登録:set_error_handler()関数.

    5.簡単なグローバルエラーハンドラの例:
    set_error_handler(function($errno, $errstr, $errfile, $errline) {
       if (!(error_reporting() & $errno)) {
        //error_reporting          ,    
        return;  
      }
      throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
    });
    
    //    
    
    //            
    restore_error_handler();
    

    関連処理コンポーネント
  • 開発環境:filp/whoops
  • 生産環境:monolog/monolog
  • 特集シリーズ
    PHP特集シリーズ目次住所:https://github.com/xx19941215/webBlog PHP特集シリーズは20編ぐらい書く予定で、主に私たちの日常のPHP開発の中で無視しやすい基礎知識と現代のPHP開発の中で規範、配置、最適化に関するいくつかの実戦的な提案を総括し、同時にJavascript言語の特徴に対する深い研究もある.