手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

PHP分段屏蔽错误(异常)的方法

首页 > PHP >

本文来自lukin的博客。。。
Lukin,lazyCMS的作者,如果你用过,或许会知道。。。

以下是原文

我是从asp转向php的,asp里面提供了下面的方法

代码1:

ASP/Visual Basic代码
  1. on error remuse next  
  2. '这里的代码出现的错误可以被屏蔽掉  
  3. on error goto 0  
----------------------------------------------------华丽的分割线-------------------------------------------------

转向php之后,查了一些资料貌似php没有提供类似这样的语法

直接使用error_reporting(0);关闭所有错误是很不明智的。所以,考虑使用@来抑制错误的发生,但是往往不如意。

我使用的set_error_handler('myerror')监听了一个函数,直接写@抑制错误的发生那是办不到的,照样会跳到myerror函数里面进行处理,后来看WordPress的源码,发现她屏蔽错误的方法:

代码2:

PHP代码
  1. $error_reporting = error_reporting(0);  
  2. // 这里发生的错误将被屏蔽  
  3. error_reporting($error_reporting); 

应用到我系统里面,发现此方法也不好用,照样会进入myerror函数进行错误处理。

继续狂翻php手册,仔细查看set_error_handler这个函数的说明,然后查看评论(一般看手册上的评论还是很有收获的),评论上的一段代码引起了我的注意:

代码3:

PHP代码
  1. // if error has been supressed with an @  
  2. if (error_reporting() == 0) {  
  3.    return;  

细想了一下,把这段代码加入到myerror里面,果然ok了!原来使用@的时候,error_reporting()会返回0

这样可以利用@屏蔽某个函数里面发生的错误了,也可以使用【代码2】的方法来进行分段屏蔽错误了。

--EOF--

我一般是用Set_error_handler的。。还有我记得Error_reporting是可以返回当前设置的等级的。先取回当前的等级,然后设置为0,解决完后再设置回去。其实也是就第二种了。。不过我觉得lukin应该是用这种的,即:

PHP代码
  1. <?php  
  2. $old = error_reporting();  
  3. error_reporting(0);  
  4. //code....  
  5. error_reporting($old);//恢复。。  





本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

« 上一篇 | 下一篇 »

1条记录访客评论

实际上我是使用的 @func(),直接在函数前面加@符号就可以生效了

Post by Lukin on 2010, February 6, 12:06 PM 引用此文发表评论 #1


发表评论

评论内容 (必填):