PHP7 の変更のうち、より大きな影響を与える変更には、例外処理が含まれます。
より多くの例外が PHP を通じて直接処理されます。 以前の PHP5 とは異なり、より多くの例外がエラー例外を通じてスローされます。
通常の拡張として、対応する catch
ブロックが一致するまで、エラー例外がポップアップし続けます。一致しない場合、セット set_Exception_handler()
がトリガーされて処理が実行されます。デフォルトの例外ハンドラーがない場合、例外は致命的なエラーに変換され、従来の例外と同様に処理されます。エラーは処理されます。 catch
块。如果没有进行匹配,就会触发被设置的set_exception_handler()
来执行处理,如果没有默认的异常处理程序,则该异常将被转换为一个致命错误,并且将被像一个传统的错误被处理。
由于Error在错误层次结构不继承异常,像这样的代码catch (Exception $e) { ... }
在PHP5中并不会捕获到对应的异常。我们可以用代码catch (Error $e) { ... }
或者 set_exception_handler()
catch (Exception $e) { ... }
のようなコードは、PHP5 の対応する例外をキャッチしません。コード catch (Error $e) { ... }
または set_Exception_handler()
を使用してエラーを処理できます。 階層が間違っています
Throwable
ArithmeticError ArithmeticError
ParseError 解析エラー
Error エラー
Exception
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); }
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 }
function call_method($obj) { $obj->method(); }try { call_method(null); // oops! } catch (EngineException $e) { echo "Exception: {$e->getMessage()}\n"; }//其实上面的例子我在运行过程中,并没有被EngineException捕获异常,经过测试,也是通过Error进行的错误的拦截
以上がPHP7 の例外処理コード例の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。