igo*_*s07 7 php error-handling exception-handling php-7
在PHP5上,它具有很多意义,包含set_exception_handler()
和set_error_handler()
定义.
但是,在PHP7上,所有(大多数?)错误现在都是异常.那么,定义两个处理程序有什么意义呢,即使错误会通过异常处理程序传递?
我Error
在异常处理程序doc中看到有关于PHP7新类的注释,但是Throwable
在错误处理函数中没有引用不存在普通错误的事实,而是s.
从PHP 7开始,大多数错误都是通过抛出
Error
异常来报告的,这些异常也会被处理程序捕获.双方Error
并Exception
实现了Throwable
接口.[资源]
Aaron Piotrowski(制作新的Error-Exception系统的人)有一个很棒的博客.我认为你需要理解的关键点是这一点
在PHP 7中,当发生致命和可恢复的错误(
E_ERROR
和E_RECOVERABLE_ERROR
)而不是暂停脚本执行时,将抛出异常.某些条件仍然存在致命错误,例如内存不足,并且仍然像以前一样立即停止脚本执行.未捕获的异常也将继续是PHP 7中的致命错误.这意味着如果从PHP 5.x中的致命错误抛出的异常未被捕获,它仍将是PHP 7中的致命错误.请注意,其他类型的错误(如警告和通知)在PHP 7中保持不变.只有致命和可恢复的错误才会引发异常.
以此不同的方式考虑这一点
set_exception_handler()
- Exception
默认情况下处理s的函数 (从PHP 7.0开始,这可以处理所有Throwable
s,因此它可以捕获可恢复的错误)set_error_handler()
- 处理可恢复错误的功能换句话说,他们的功能没有改变.在PHP5中触发它们的任何东西都会在PHP7中触发它们,现在,您可以try-catch
在脚本级别使用块来处理特定错误.