本文来自lukin的博客。。。
Lukin,lazyCMS的作者,如果你用过,或许会知道。。。
以下是原文
我是从asp转向php的,asp里面提供了下面的方法
代码1:
- on error remuse next
- '这里的代码出现的错误可以被屏蔽掉
- on error goto 0
转向php之后,查了一些资料貌似php没有提供类似这样的语法
直接使用error_reporting(0);关闭所有错误是很不明智的。所以,考虑使用@来抑制错误的发生,但是往往不如意。
我使用的set_error_handler('myerror')监听了一个函数,直接写@抑制错误的发生那是办不到的,照样会跳到myerror函数里面进行处理,后来看WordPress的源码,发现她屏蔽错误的方法:
代码2:
- $error_reporting = error_reporting(0);
- // 这里发生的错误将被屏蔽
- error_reporting($error_reporting);
应用到我系统里面,发现此方法也不好用,照样会进入myerror函数进行错误处理。
继续狂翻php手册,仔细查看set_error_handler这个函数的说明,然后查看评论(一般看手册上的评论还是很有收获的),评论上的一段代码引起了我的注意:
代码3:
细想了一下,把这段代码加入到myerror里面,果然ok了!原来使用@的时候,error_reporting()会返回0
这样可以利用@屏蔽某个函数里面发生的错误了,也可以使用【代码2】的方法来进行分段屏蔽错误了。
--EOF--
我一般是用Set_error_handler的。。还有我记得Error_reporting是可以返回当前设置的等级的。先取回当前的等级,然后设置为0,解决完后再设置回去。其实也是就第二种了。。不过我觉得lukin应该是用这种的,即: