在 PHP5 上,同时拥有这两者是很有意义的set_exception_handler()
and set_error_handler()
定义的。
然而,在 PHP7 上,所有(大多数?)错误现在都是例外。那么,如果甚至错误都会通过异常处理程序传递,那么定义两个处理程序有什么意义呢?
我看到有一个关于 PHP7 new 的说明Error
异常处理程序文档中的类,但没有提到不再有任何简单错误的事实,但是Throwable
s,在错误处理函数中。
从 PHP 7 开始,大多数错误都是通过抛出异常来报告的Error
异常,也将被处理程序捕获。两个都Error
and Exception
实施Throwable
界面。[source] https://www.php.net/manual/en/function.set-exception-handler.php#refsect1-function.set-exception-handler-parameters
Aaron Piotrowski(新错误异常系统的开发者)有一个关于这个的很棒的博客 https://trowski.com/2015/06/24/throwable-exceptions-and-errors-in-php7/。我认为你需要理解的关键点是这一点
在 PHP 7 中,当发生致命且可恢复的错误(E_ERROR
and E_RECOVERABLE_ERROR
)发生,而不是停止脚本执行。在某些情况下,致命错误仍然存在,例如内存不足,并且仍然像以前一样立即停止脚本执行。未捕获的异常在 PHP 7 中也将继续是致命错误。这意味着,如果从 PHP 5.x 中致命的错误引发的异常未被捕获,那么它在 PHP 7 中仍然是致命错误。
请注意,其他类型的错误(例如警告和通知)在 PHP 7 中保持不变。只有致命错误和可恢复错误才会引发异常。
用不同的方式来考虑这个
-
set_exception_handler()
- 处理函数Exception
默认情况下(从 PHP 7.0 开始,这可以处理所有Throwable
s,因此它可以捕获可恢复的错误)
-
set_error_handler()
- 处理可恢复错误的功能
换句话说,它们的功能没有改变。任何在 PHP5 中触发它们的东西都会在 PHP7 中触发它们,只是现在,您可以使用try-catch
在脚本级别阻止以处理特定错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)