php中的错误处理

手册中的位置:语言参考---异常处理

或者在w3c教程手册中的:服务器脚本/php高级/php错误处理(php异常处理)


如下代码:

[php]  view plain  copy
  1. $fp = fopen("a.txt","r");  

如果a.txt文件不存在,程序就会报告警告或者错误。所以为了程序的健壮性,应该先判断a.txt文件是否存在。

[php]  view plain  copy
  1. if(!file_exists("a.txt")){  
  2.         echo "文件不存在";  
  3.         exit();  
  4.     }  

PHP处理错误的方式有以下几种:
1.die语句
2.自定义错误处理函数
3.自定义错误触发器
4.错误日志的方式


1.die语句
die语句终止简本,等价于exit语句,但是die可以输出提示语句。
如:

[php]  view plain  copy
  1. if(!file_exists("a.txt")){  
  2.     die("文件不存在");  
  3. }  

也可以写成

[php]  view plain  copy
  1. file_exists("a.txt"or die("文件不存在");  

die之后的语句不会被执行。


2.自定义错误处理函数(系统识别)

[php]  view plain  copy
  1. $fp=fopen("a.txt","r");  

对于这句代码,系统会打印出warning:.....这是系统默认的处理。我们可以通过自定义处理方式处理错误,而不是交由系统默认处理。
【补充】 php中的错误级别:

[php]  view plain  copy
  1. E_WARNING , E_NOTICE ,E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE, E_RECOVERABLE_ERROR , E_ALL  

自定义的错误处理函数必须至少接受2个参数(error level,error message),可最多接受5个参数,其余3个都为可选参数(file,line number,error context)。

[php]  view plain  copy
  1. function my_error($errno ,$errmsg){  
  2.           
  3. }  


通过set_error_handler("my_error",错误级别);让系统覆盖原来的默认处理函数,使用指定的函数处理指定错误级别的错误。
此处的错误级别一般为不以E_USER开头的错误级别。

这种处理方式是系统自动匹配识别出现错误属于哪种级别。



3.错误触发器(用户识别)
现有需求:如果年龄大雨120,则认为程序错误。
按照传统的方式:

[php]  view plain  copy
  1. if($age>120){  
  2.         exit();  
  3. }  
触发器方式:
先自定义错误触发器,错误触发器的定义和错误处理函数的定义相似,其参数一样,也是必须至少接受2个参数(error level,error message),可最多接受5个参数,其余3个都为可选参数(file,line number,error context)。

[php]  view plain  copy
  1. function my_error($errno,$errmsg){  
  2.           
  3. }  


再通过set_error_handler("my_error",错误级别)设置错误触发器触发级别以及处理函数。该处的错误级别一般是以E_USER开头的错误级别。
最后在程序中调用trigger_error("my_error",同时指定错误级别)。如果,指定的该错误级别与设置触发的级别不同,则不会触发错误处理函数;如果相同,才会触发错误处理函数。

[php]  view plain  copy
  1. function my_error($errno,$errmsg){  
  2.           
  3.     }  
  4.       
  5.     set_error_handler("my_error",E_USER_WARNING);  
  6.       
  7.     if($age>120){  
  8.         trigger_error("my_error",E_USER_WARNING);//级别相同,会触发错误处理函数  
  9.         trigger_error("my_error",E_USER_NOTICE);//级别不相同,不会触发错误处理函数  
  10.     }  

这种处理方式是需要人工手动指定出现的错误的级别。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值