ホームページ  >  記事  >  バックエンド開発  >  PHP7 の例外処理コード例の詳細な紹介

PHP7 の例外処理コード例の詳細な紹介

黄舟
黄舟オリジナル
2017-03-11 09:22:211317ブラウズ

はじめに

PHP7 の変更のうち、より大きな影響を与える変更には、例外処理が含まれます。

概要

より多くの例外が PHP を通じて直接処理されます。 以前の PHP5 とは異なり、より多くの例外がエラー例外を通じてスローされます。

通常の拡張として、対応する catch ブロックが一致するまで、エラー例外がポップアップし続けます。一致しない場合、セット set_Exception_handler() がトリガーされて処理が実行されます。デフォルトの例外ハンドラーがない場合、例外は致命的なエラーに変換され、従来の例外と同様に処理されます。エラーは処理されます。 catch块。如果没有进行匹配,就会触发被设置的set_exception_handler()来执行处理,如果没有默认的异常处理程序,则该异常将被转换为一个致命错误,并且将被像一个传统的错误被处理。

由于Error在错误层次结构不继承异常,像这样的代码catch (Exception $e) { ... }在PHP5中并不会捕获到对应的异常。我们可以用代码catch (Error $e) { ... }或者 set_exception_handler()

Error はエラー階層内の例外を継承しないため、この catch (Exception $e) { ... } のようなコードは、PHP5 の対応する例外をキャッチしません。コード catch (Error $e) { ... } または set_Exception_handler() を使用してエラーを処理できます。

階層が間違っています

  • Throwable

    • ….

    • ArithmeticError ArithmeticError

    • AssertionError ステートメントエラー
    • ParseError 解析エラー
    • TypeError 型エラー
    • pisionByZeroError除数が0の場合のエラー

    • Error エラー


    • Exception

PHP RFC

Throwable Interface

function add(int $left, int $right) {
    return $left + $right;
}try {    echo add('left', 'right');
} catch (Exception $e) {    // Handle exception} catch (Error $e) { // Clearly a different type of object
    // Log error and end gracefully
    var_dump($e);
}

ここでは、サーバーが表示されません 500 エラー。その理由は、PHP7 のエラーがそれをインターセプトし、サーバー内でバブルアップしないためです。

object(TypeError)#1 (7) {
  ["message":protected]=>  
  string(139) "Argument 1 passed to add() must be of the type integer, string given, called in /Applications/mamp/apache2/htdocs/curl/error.php on line 14"
  ["string":"Error":private]=>  string(0) ""
  ["code":protected]=>  int(0)
  ["file":protected]=>  string(48) "/Applications/mamp/apache2/htdocs/curl/error.php"
  ["line":protected]=>  int(9)
  ["trace":"Error":private]=>
  array(1) {
    [0]=>
    array(4) {
      ["file"]=>      string(48) "/Applications/mamp/apache2/htdocs/curl/error.php"
      ["line"]=>      int(14)
      ["function"]=>      string(3) "add"
      ["args"]=>
      array(2) {
        [0]=>        string(4) "left"
        [1]=>        string(5) "right"
      }
    }
  }
  ["previous":"Error":private]=>
  NULL
}

それで、ログを通じて記録することができます。

エンジン内の例外 (PHP 7 の場合)

function call_method($obj) {
    $obj->method();
}try {
    call_method(null);
     // oops!
     } 
     catch (EngineException $e) {    
    echo "Exception: {$e->getMessage()}\n";
}//其实上面的例子我在运行过程中,并没有被EngineException捕获异常,经过测试,也是通过Error进行的错误的拦截

例外がキャッチされない場合、PHP は現在と同じ致命的なエラーをスローし続けます。

E_STRICT 通知を再分類


🎜

以上がPHP7 の例外処理コード例の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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