我是从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:
--------------------------------------------------------
// if error has been supressed with an @
if (error_reporting() == 0) {
return;
}
--------------------------------------------------------
细想了一下,把这段代码加入到myerror里面,果然ok了!原来使用@的时候,error_reporting()会返回0
这样可以利用@屏蔽某个函数里面发生的错误了,也可以使用【代码2】的方法来进行分段屏蔽错误了。
