注册错误和异常处理机制有三个PHP函数需要学习

1. register_shutdown_function(‘Bootstrap\Library\Frame::fatalError’);

2. set_error_handler(‘Bootstrap\Library\Frame::appError’);

3. set_exception_handler(‘Bootstrap\Library\Frame::appException’);


1.register_shutdown_function

定义:该函数是来注册一个会在PHP中止时执行的函数

参数说明:

注册一个 callback ,它会在脚本执行完成或者 exit() 后被调用。

callback:待注册的中止回调

parameter:可以通过传入额外的参数来将参数传给中止函数

PHP终止情况有三种

执行完成

注意输出的顺序,等执行完成了之后才会去执行register_shutdown_function的中止方法test 

exit/die导致的中止

后面的after并没有输出,即exit或者是die方法导致提前中止。

发生致命错误中止

后面的after也是没有输出,致命错误导致提前中止了。

参数:第一个参数支持以数组的形式来调用类中的方法,第二个以及后面的参数都是可以当做额外的参数传给中止方法。


也可以在类中执行:

可以多次调用 register_shutdown_function,这些被注册的回调会按照他们注册时的顺序被依次调用。
不过注意的是,如果在第一个注册的中止方法里面调用exit方法或者是die方法的话,那么其他注册的中止回调也不会被调用。


代码:

该函数的作用:

  • 析构函数:在PHP4的时候,由于类不支持析构函数,所以这个函数经常用来模拟实现析构函数
  • 致命错误的处理:使用该函数可以用来捕获致命错误并且在发生致命错误后恢复流程处理

代码如下:

注意:PHP7中新增了Throwable异常类,这个类可以捕获致命错误,即可以使用try…catch(Throwable $e)来捕获致命错误。

代码如下:

运行:

这样的话,PHP7中使用Throwable来捕获的话比使用register_shutdown_function这个函数来得更方便,也更推荐Throwable。

注意:Error类也是可以捕获到致命错误,不过Error只能捕获致命错误,不能捕获异常Exception,而Throwable是可以捕获到错误和异常的,所以更推荐。

总结:register_shutdown_function这个函数主要是用在处理致命错误的后续处理上(PHP7更推荐使用Throwable来处理致命错误),不过缺点也很明显,只能处理致命错误Fatal error,其他的错误包括最高错误Parse error也是没办法处理的。 剩下2个下次发!