学习注册错误和异常处理机制的三个PHP函数1.register_shutdown_function('Bootstrap\Library\Frame::fatalError');2.set_error_handler('Bootstrap\Library\Frame::应用错误');3.set_exception_handler('Bootstrap\Library\Frame::appException');1.register_shutdown_function定义:该函数是注册一个PHP终止时执行的函数参数说明:voidregister_shutdown_function(callable$callback[,mixed$parameter[,mixed$...]])在脚本完成执行或exit()后调用。callback:需要注册的悬浮回调parameter:参数可以通过传入额外的参数传递给悬浮函数PHP中有三种执行完成before//=>这是abort方法test的输出注意输出的顺序,register_shutdown_function的abort方法test会在执行完成后执行exit/die导致挂起before//=>这是abort方法test输出的after,没有输出,即exit或die方法导致提前终止。致命错误中止before//=>致命错误:未捕获错误:在第12行的D:\laragon\www\php_book\test.php中找不到类'a'//=>错误:在中找不到类'a'D:\laragon\www\php_book\test.php第12行//=>调用堆栈://=>0.00203607601.{main}()D:\laragon\www\php_book\test.php:0//=>这是abort方法test输出后没有输出,致命错误导致提前abort。参数:第一个参数支持以数组的形式调用类中的方法,第二个及以后的参数可以作为附加参数传递给abort方法。f():".$海峡;}}$demo=newTestDemo();回声“之前”。PHP_EOL;/**run:beforeclassTestDemo->f():hello*/register_shutdown_function可以调用多次,这些注册的回调会按照注册的顺序依次调用。但是需要注意的是,如果在第一个注册的挂起方法中调用了exit方法或者die方法,那么其他注册的挂起回调将不会被调用。代码:`f():".$海峡;}}$demo=newTestDemo();回声“之前”。PHP_EOL;/**Run:beforehelloclassTestDemo->f():hello注意:如果在f方法中调用了exit或者die,那么最后的classTestDemo->f():hello不会输出*/`的函数thisfunction:destructor:在PHP4中,由于类不支持析构函数,所以在析构函数中经常使用该函数来模拟致命错误的处理:使用该函数可以捕获致命错误并在致命错误后恢复进程错误。处理代码如下:1[message]=>UncaughtError:Class'a'notfoundinD:\laragon\www\php_book\1_23_register_shutdown.php:31Stacktrace:#0{main}抛出[文件]=>D:\laragon\www\php_book\1_23_register_shutdown.php[行]=>31)停止。注意:在PHP7中添加了Throwable异常类。该类可以捕获致命错误,即可以使用try...catch(Throwable$e)来捕获致命错误代码如下:getMessage();}运行:错误对象([message:protected]=>找不到类'a'[string:Error:private]=>[code:protected]=>0[file:protected]=>C:\laragon\www\php_book\throwable.php[line:protected]=>5[trace:Error:private]=>Array()[previous:Error:private]=>[xdebug_message]=>错误:在C中找不到类'a':\laragon\www\php_book\throwable.phponline5CallStack:0.00003498561.{main}()C:\laragon\www\php_book\throwable.php:0)在找不到类'a'的情况下,使用Throwable抓取PHP7比register_shutdown_function更方便,推荐使用Throwable。注意:Error类也可以捕获致命错误,但是Error只能捕获致命错误,不能捕获Exception,但是Throwable可以捕获错误和异常,所以比较推荐。总结:register_shutdown_function函数主要用于致命错误的后续处理(PHP7推荐使用Throwable来处理致命错误),但缺点也很明显。它只能处理fatalerrors,其他错误包括最高errorParseerror都没有办法处理。下一篇还有2篇!