关于php的 register_shutdown_function 和 error_get_last函数

关于php的 register_shutdown_function 和 error_get_last函数

 void register_shutdown_function ( callable $callback [, mixed $parameter [, mixed $... ]] )

 

返回值: 整数

函数种类: PHP 系统功能

本函数向系统定义 PHP 程序 (Script) 执行结束之后所要执行的函数。当执行该指定的函数时,由于无法看到返回值,因此调试较困难。

 

 

[php] view plain copy

  1. function demo() {  
  2.     echo '我执行了~';  
  3. }  
  4. register_shutdown_function("demo");  
  5.   
  6. $a = 1;  
  7. $a = new Demo();//这里出错,下面内容无法执行输出。  
  8. echo '看看出错说什么~';  

结果是 xdebug 提示错误信息,然后下面输出 “我执行了~”.

 

 

[php] view plain copy

  1. function demo() {  
  2.     echo '我执行了~';  
  3. }  
  4. register_shutdown_function("demo");  
  5.   
  6. $a = 1;  
  7. echo '看看出错说什么~';  
执行结果是:看看出错说什么~ 我执行了~

 

 

so,这个函数不管是程序执行完毕还是程序执行出错,最后总是会回调我们写的demo函数。

好了,我们可以利用这个特性写一个专门记录程序执行错误、记录日志的函数。

只需要在回调函数demo中加个判断就OK了~

 

 

[php] view plain copy

  1. function demo() {  
  2.     $error = error_get_last();  
  3.     if (in_array($error['type'],array(E_ERROR,E_WARNING))) {//把你需要记录的错误类型修改下就行  
  4.         //这里可以调用你写的Log类或者方法记录错误信息。 也可以使用xhprof扩展什么的  
  5.         echo '我执行了~';  
  6.         var_dump($error);  
  7.     }  
  8. }  
  9. register_shutdown_function("demo");  
  10.   
  11. $a = 1;  
  12. $a = new Demo();  
  13. echo '看看出错说什么~';  

输出结果:

 

xdebug 提示的错误信息....

我执行了~

array (size=4) 'type' => 1 'message' => 'Class 'Demo' not found' (length=22) 'file' => 'D:\wamp\www\testmysql.php' (length=25) 'line' => 13

 


就是这么简单~ 保证你需要记录的错误信息都能被记录下来,然后记录完错误信息,给用户发个友好的错误提示,用户体验也就有了。

关于  error_get_last()函数 :

error_get_last() 函数获取最后发生的错误。
该函数以数组的形式返回最后发生的错误。
返回的数组包含 4 个键和值:
[type] - 错误类型
[message] - 错误消息
[file] - 发生错误所在的文件
[line] - 发生错误所在的行

 

综上所述,有些函数还是挺重要的。只不过我们平时没看到、没注意到而已。 多看php手册也许会有意想不到的收获。

当然,读项目代码有时候也能发现亮点~~

猜你喜欢

转载自blog.csdn.net/weixin_36691991/article/details/88671962