我是靠谱客的博主 苹果康乃馨,最近开发中收集的这篇文章主要介绍PHP中非期望致命错误的另一种处理方式:register_shutdown_function(),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  程序员正确的逻辑,和良好的编程风格,对一段代码实现来说是非常重要的,既能最大限度地保证程序的准确运行,也可以在出现错误时便于调试。但也有一些意外情况的出现,导致了代码运行得到非期望的结果。当然,一些健壮的语言可以有很好的异常处理机制,比如java,但我这里要说的是在使用php进行web开发的过程中遇到的一点小问题。
  日前自己参考wordpress摆弄了一个极其简易的blog程序,在实现文章编辑成功,并相指定地址发送pingback的时候,出了点小故障。期望结果是完成以上操作后,定向到文章列表页面。而出现的意外情况是,当指定的地址不可用(目标地址服务器不可访问)时,产生了一个致命错误,返回页面是错误信息,并没有如期望的跳转到文章列表。
  显然,程序的健壮性不够,没有考虑到上面的异常情况。发送pingback的功能使用了php提供的套接字连接函数,在后来的测试时,若目标主机不存在,并不会导致致命错误,只是一个警告,而让人困惑的是先前的测试却出现了致命错误,可能是我修改了某些php配置引起的吧(调整了一些模块)。对于这种情况,一般用错误抑止符就可以忽略了错误信息的输出。而我想知道wordpress的处理方式是怎样的,读了它的这段实现代码后,发现其做法是在套接字连接函数前加了错误抑止符,另外将发送pingback的函数通过register_shutdown_function()注册为请求结束时的动作。这一做法给了我以启示,在php手册中,关于register_shutdown_function()函数的说明中,有这么一段注解:

Typically undefined functions cause fatal errors in PHP, but when the function called with register_shutdown_function() is undefined, an error of level E_WARNING is generated instead. Also, for reasons internal to PHP, this error will refer to Unknown() at line #0.


我们不妨将其理解为该函数可以让致命错误降级,而函数说明中有如下描述:


The registered shutdown functions are called after the request has been completed (including sending any output buffers), so it is not possible to send output to the browser using echo() or print(), or retrieve the contents of any output buffers using ob_get_contents().

那么我们就可以使用这个函数来实现类似‘@’抑止错误信息的效果了。
  当然,使用这个函数来处理一些错误信息可能是得不偿失,因为这个函数的用途的初衷并不是这样的,而且,我也未能测试其执行效率,在此只是尝试另一种思路而已。
  手册中还有一段说明:PHP 3 或者 PHP 4 中都没有析构函数。你可以使用register_shutdown_function() 函数来模拟多数析构函数的效果。我想,这才是物尽其用吧!

最后

以上就是苹果康乃馨为你收集整理的PHP中非期望致命错误的另一种处理方式:register_shutdown_function()的全部内容,希望文章能够帮你解决PHP中非期望致命错误的另一种处理方式:register_shutdown_function()所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部