ホームページ  >  記事  >  バックエンド開発  >  PHPの例外処理、エラースロー、エラーコールバック関数

PHPの例外処理、エラースロー、エラーコールバック関数

WBOY
WBOYオリジナル
2016-07-25 09:03:531248ブラウズ
  1. try{

  2. // エラーを引き起こす可能性のあるコードを記述しました

  3. }catch(Exception $err){ // このエラー オブジェクトは型を宣言する必要があります。例外はシステムのデフォルトの例外処理クラスです

  4. echo $err->getMessage();
  5. }

  6. //thrown は次のような例外をスローできます:

  7. thrown new Exception('an error ');

コードをコピー

例:

  1. try {

  2. if ( empty( $var1 ) ) throw new NotEmptyException();
  3. if ( empty( $var2 ) ) throw new NotEmptyException();
  4. if ( ! preg_match() ) throw new InvalidInputException();

  5. $model->write();

  6. $template->render( 'success' );
  7. } catch ( NotEmptyException $e ) {
  8. $template->render( 'error_empty' );
  9. } catch ( InvalidInputException $e ) {
  10. $template->render( 'error_preg' );
  11. }

コードをコピー

Exception クラスの構造: ほとんどのメソッドはオーバーライドが禁止されています (最終) 例外 { /* 属性 */ 保護された文字列 $message; protected int $code; 保護された文字列 $file; protected int $line; /* 方法 */ public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = null]]] ) Final public string getMessage (void) //例外によってスローされたメッセージ Final public Exception getPrevious (void) //前の例外 Final public int getCode (void) //例外コード、これはユーザー定義です Final public string getFile (void) //例外が発生したファイルパス Final public int getLine (void) //例外が発生した行 Final public array getTrace (void) //例外追跡情報(配列) Final public string getTraceAsString (void) //例外追跡情報 (string) public string __toString (void) //例外オブジェクトを文字列として直接使用しようとした場合のサブ関数呼び出しの戻り値 Final private void __clone (void) //例外オブジェクトのクローン作成時に呼び出されます }

拡張例外クラス

try-catch には複数の catch 句を含めることができます。最初の catch 句から始めて、句内の例外変数の型が throw ステートメントによってスローされた例外の型と一致する場合、その句が実行され、他の catch 句は実行されません。それ以外の場合は、引き続き次の catch 句を試行します。Exception はすべての例外クラスの基本クラスであるため、スローされる例外はそれに一致します。異なる例外の種類に応じて異なる処理メソッドを使用する必要がある場合は、Exception type catch The 句を使用する必要があります。最後に来ます。

Exception はすべての例外の基本クラスであり、例外クラスは実際のニーズに応じて拡張できます。

  1. calss MyException extends Exception{

  2. public errType = 'default';
  3. public function __construct($errType=''){
  4. $this->errType = $errType;
  5. }
  6. }

  7. try{ // エラーを引き起こす可能性のあるコードを作成しました

  8. throw new MyException('an error');
  9. }catch(MyException $err){ // このエラー オブジェクトは宣言する必要があります型
  10. echo $err->errType();
  11. }catch(ErrorException $err){ //ErrorException は Exception
  12. から継承された例外クラスです echo 'error !'
  13. }catch(Exception $; err){
  14. redirect('/error.php');
  15. }

コードをコピー

catch 句で例外のタイプを決定することも、例外ベースで例外を処理するかどうかを決定することもできます。コードやその他の情報については、catch 句をアンロードしたコードがキャッチされた例外を適切に処理できない場合は、catch 句内で例外をスローし続けることができます。 3. 例外コールバック関数 set_Exception_handler(callback functionName) //この関数は、Exception またはそのサブクラスの例外が発生したときに呼び出されます。 functionExceptionHandlerFun($errObj){ // 例外例外コールバック関数には、スローされた例外オブジェクトであるパラメータが 1 つだけあります。 //...... }

例外例外のコールバック関数は、set_error_handlerのコールバック関数のようにtrueを返して例外を排除することはできません。コールバック関数が例外を処理しても後続のコードは実行されませんので、後続のコードを実行し続けたい場合はtry-catchする必要があります。使用済み 。

ただし、例外があります。スクリプト終了コールバック関数は実行でき、スローされた例外が処理されない場合でもコールバック関数は実行できます。 register_shutdown_function(コールバック関数名[,引数1,引数2,...]);

例:

  1. function shutdownfunction(){
  2. echo 'スクリプトは終了';
  3. }
  4. register_shutdown_function("shutdownfunction");
コードをコピー

shutdownfunction() はスクリプトの最後で実行されるため、エラーがスローされた後に関数が定義されている場合でも、スクリプト内の任意の場所にある関数をこのコールバック関数内で呼び出すことができます (関数の定義はスクリプトのコンパイル期間中に完了します) )。

4.trigger_error(string errorMsg[,int user_error_type]) この関数は、エラーをアクティブにトリガーするために使用されます。 user_error_type には、E_ALL、E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE、またはそれらの組み合わせの値のみを指定できます。

set_error_handler(callback functionName[,user_error_type]); //システムによってスローされたエラーや、trigger_error() 関数を使用してユーザーによってトリガーされたエラーなどのエラーを処理するために、trigger_error() のコールバック関数を設定します。

オプションのパラメータ user_error_type: このパラメータを設定すると、trigger_error でスローされたエラーの種類が user_error_type の定義範囲と一致する場合にのみコールバック関数を起動できます。 この値は、error_reporting() 関数と同様に設定されます。

最初のパラメータ (コールベック関数名): 関数名には 5 つのパラメータを含めることができ、そのうち最初の 2 つは必須です。 trigger_error がスローする user_error_type、trigger_error がスローする errorMsg、エラーをスローするファイルの絶対パス、エラーをスローする行番号、およびエラーがスローされたときのコンテキスト (trigger_error がスローされるスコープ内のすべてを含む配列) () には変数、関数、クラス、その他のデータがあります)

コールバック関数の戻り値: false が返された場合、システム エラー処理メカニズムはエラーをスローし続け、エラーを除去するために true または戻り値を返しません。 trigger_error() によってトリガーされたエラーは、try-catch 例外キャッチ ステートメントではキャッチされません。 興味があるかもしれない記事: PHP例外処理に関する知識 PHPの例外処理クラスExceptionの使用例 phpの例外処理、エラースロー、エラーコールバック関数 単純なPHPカスタム例外クラス PHP エラーと例外設定を学ぶ



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。