php 的错误与异常处理(一)错误处理

前言:

好的代码,不仅仅要代码设计优美,结构清晰。更要有完善的错误处理机制,特别是针对异常的处理,只有这样才能在系统出现问题的时候,准确排查错误。记住,错误和异常不是一回事,错误是开发阶段的一些失误,引起的程序问题,您只要解决掉错误才能推进程序的开发。异常,则是项目在运行的过程中遇到的一些意外,导致程序运行失败。

错误处理:

错误主要分语法错误,运行时错误,逻辑错误三大种。

  1. 语法错误: 语法错误最常见,比如遗漏了“}“号,遇到这样的错误,后面的程序就不能继续执行了。
  2. 运行时错误:这种错误发生在编译时,例如在header()函数前有字符输出,php通常会显示一条错误,但是后面的程序能继续执行。
  3. 逻辑错误:属于您自身程序逻辑的设计错误,不影响程序执行,但是和您期望的结果会有偏差,比如在jf判断的时候,==判断错写成=。变成了赋值语句,永远返回true。

错误级别:运行php是,php解析器会尽可能的汇报它遇到的错误,这是php解析器的相关功能。如果您不希望php解析器显示错误,可以修改php.ini文件中的display_errors=off。注意,这只是关闭的错误的显示,错误依然存在。主要用于线上环境,您不希望客户看到错误等敏感信息时使用。
php解析器会按照错误发生的严重程度进行汇报,有些错误比较严重,程序会暂停。有些错误则只是警告,会继续执行。您可以通过修改php.ini的error_reporting=E_AAL&~E_NOTICE设置您想看到的错误级别。比如您想看到所以错误,除了警告错误。
1     E_ERROR           致命的运行错误。错误无法恢复,暂停执行脚本。
2     E_WARNING         运行时警告(非致命性错误)。非致命的运行错误,脚本执行不会停止。
4     E_PARSE           编译时解析错误。解析错误只由分析器产生。
8     E_NOTICE          运行时提醒(这些经常是你代码中的bug引起的,也可能是有意的行为造成的。)
16    E_CORE_ERROR PHP  启动时初始化过程中的致命错误。
32    E_CORE_WARNING    PHP启动时初始化过程中的警告(非致命性错)。
64    E_COMPILE_ERROR   编译时致命性错。这就像由Zend脚本引擎生成了一个E_ERROR。
128   E_COMPILE_WARNING 编译时警告(非致性错)。这就像由Zend脚本引擎生成了E_WARNING警告。
256   E_USER_ERROR      自定义错误消息。像用PHP函数trigger_error(程序员设置E_ERROR)
512   E_USER_WARNING    自定义警告消息。像用PHP函数trigger_error(程序员设的E_WARNING警告) 
1024  E_USER_NOTICE     自定义的提醒消息。像由使用PHP函数trigger_error(程序员E_NOTICE集)
2048  E_STRICT          编码标准化警告。允许PHP建议修改代码以确保最佳的互操作性向前兼容性。 
4096  E_RECOVERABLE_ERROR   开捕致命错误。像E_ERROR,但可以通过用户定义的处理捕获(又见set_error_handler())
8191  E_ALL             所有的错误和警告(不包括 E_STRICT) (E_STRICT will be part of E_ALL as of PHP 6.0)
16384 E_USER_DEPRECATED 
30719 E_ALL

修改错误级别还是比较常用的,每次修改php.ini太麻烦了,所以php提供了error_reporting(0);函数来处理。

例子:
<?php
//开启php.ini中的错误显示
ini_set('display_errors',1);
//错误输出级别-所有错误
error_reporting(E_ALL);
//注意:notice的报告,不会阻止脚本的执行,并且可能不是一个问题。
getType($var);
//警告:warning的报告,不会阻止脚本的执行,但应该是一个问题。
getType();
//错误:error的报告,会阻止脚本的执行
get_type();
?>

您得到的错误如下,可以清楚的看到php是怎样按照错误的级别提交错误的。您可以试试,降error错误放到前面,您会发现后面的错误不会触发了,因为程序终止了!

到目前为止,您看到的错误,都是由于错误的代码,php解析器发现后给您抛出的。那自己要能否抛出这些错误呢?答案是肯定的
<?php
$site = "http://www.w3school.com.cn/";
fopen($site,"r")
or die("Unable to connect to $site");
?>
在上面的代码中,我们通过die来结束代码,并返回字符串提示错误。但是提示的错误信息只是一个字符串,过于简单。
您可以通过trigger_error(error_msg)函数来抛出错误。

<?php
$site = "http://www.w3school.com.cn/";
fopen($site,"r")
or trigger_error("Unable to connect to $site");
?>



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值