void register_shutdown_function ( callable $callback
[, mixed $parameter
[, mixed $...
]] )
返回值: 整数
函数种类: PHP 系统功能
本函数向系统定义 PHP 程序 (Script) 执行结束之后所要执行的函数。当执行该指定的函数时,由于无法看到返回值,因此调试较困难。
- function demo() {
- echo '我执行了~';
- }
- register_shutdown_function("demo");
- $a = 1;
- $a = new Demo();//这里出错,下面内容无法执行输出。
- echo '看看出错说什么~';
结果是 xdebug 提示错误信息,然后下面输出 “我执行了~”.
- function demo() {
- echo '我执行了~';
- }
- register_shutdown_function("demo");
- $a = 1;
- echo '看看出错说什么~';
so,这个函数不管是程序执行完毕还是程序执行出错,最后总是会回调我们写的demo函数。
好了,我们可以利用这个特性写一个专门记录程序执行错误、记录日志的函数。
只需要在回调函数demo中加个判断就OK了~
- function demo() {
- $error = error_get_last();
- if (in_array($error['type'],array(E_ERROR,E_WARNING))) {//把你需要记录的错误类型修改下就行
- //这里可以调用你写的Log类或者方法记录错误信息。 也可以使用xhprof扩展什么的
- echo '我执行了~';
- var_dump($error);
- }
- }
- register_shutdown_function("demo");
- $a = 1;
- $a = new Demo();
- echo '看看出错说什么~';
输出结果:
xdebug 提示的错误信息....
我执行了~
array (size=4) 'type' => int 1 'message' => string 'Class 'Demo' not found' (length=22) 'file' => string 'D:\wamp\www\testmysql.php' (length=25) 'line' => int 13
就是这么简单~ 保证你需要记录的错误信息都能被记录下来,然后记录完错误信息,给用户发个友好的错误提示,用户体验也就有了。
关于 error_get_last()函数 :
error_get_last() 函数获取最后发生的错误。
该函数以数组的形式返回最后发生的错误。
返回的数组包含 4 个键和值:
[type] - 错误类型
[message] - 错误消息
[file] - 发生错误所在的文件
[line] - 发生错误所在的行
综上所述,有些函数还是挺重要的。只不过我们平时没看到、没注意到而已。 多看php手册也许会有意想不到的收获。
当然,读项目代码有时候也能发现亮点~~