设为首页 收藏本站
查看: 521|回复: 0

[经验分享] php的错误和异常(转载)

[复制链接]

尚未签到

发表于 2017-4-2 08:35:22 | 显示全部楼层 |阅读模式
  一个正规的程序或项目不但代码优美,可读性强,而且错误和异常处理信息也要明确直观,这样对我们以后的项目维护带来很大的方便性,好了,咱们就一一介绍下吧:

一、exit(),die()和trigger_error()
      首先die()同等于exit(),两者如果执行都会中止PHP程序,而且在死之前都可以留句遗言!exit()和die()唯一不同的是exit() 可以返回0--254状态值,0表示返回成功。trigger_error()生成一个用户警告来代替,使程序更具有灵活性.例如: trigger_error("Cannot find file", E_USER_ERROR); 使用trigger_error()函数来替代die(),你的代码在处理错误上会更具优势,对于客户程序员来说更易于处理错误。

二、应该常用 return false
     在做判断时,如果为否则返回return false;是一个不错的选择,因为它会在你输出相关错误信息时继续执行程序。明显return false输出的错误信息量不足,对调试带来不便,所以建议在它之前可以做预输出错误信息。

三、error_reporting() 和 set_error_handler()
      error_reporting()是定义错误信息级别,分别有
   E_ALL输出所有错误信息
   E_NOTICE 表示一般情形不记录,只有程式有错误情形时才用到,例如企图存取一个不存在的变数,或是    呼 叫stat() 函式检视不存在的档案。
   E_WARNING 通常都会显示出来,但不会中断程式的执行。这对除错很有效。例如:用有问题的常规表示法呼叫 ereg()。
   E_ERROR 通常会显示出来,亦会中断程式执行。意即用这个遮罩无法追查到记忆体配置或其它的错误。
   E_PARSE 从语法中剖析错误。
   E_CORE_ERROR 类似 E_ERROR,但不包括 PHP 核心造成的错误。
   E_CORE_WARNING 类似 E_WARNING,但不包括 PHP 核心错误警告。
      set_error_handler()是自定义的错误处理函数一定要有这4个输入变量$errno,$errstr,$errfile,$errline,否则无效。分别为是否存在错误,错误信息,错误文件,错误行号.

四、异常处理机制
    异常处理机制是在PHP5加入的,类似想JAVA的异常吧,在 PHP 代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获。需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常。每一个 try 至少要有一个与之对应的 catch。使用多个 catch 可以捕获不同的类所产生的异常。当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一个 catch 的后面继续执行。当然,PHP 允许在 catch 代码块内再次抛出(throw)异常。PHP5的内建异常类是Exception ,以下是代码实例:

======================================

<?php
try {
    $error = 'Always throw this error';
    throw new Exception($error);

    // 从这里开始,tra 代码块内的代码将不会被执行
    echo 'Never executed';

} catch (Exception $e) {
    echo 'Caught exception: ',   $e->getMessage(), "\n";
}

// 继续执行
echo 'Hello World';
?>

======================================

根据我们以上讨论的,PHP内建的异常类需要有以下成员方法:

__construct()
构造函数,需要一个出错信息和一个可选的整型错误标记作参数

getMessage()
取得出错信息

getCode()
出错的代码

getFile()
异常发生的文件

getLine()
异常发生的行数

getTrace()
跟踪异常每一步传递的路线,存入数组,返回该数组

getTraceAsString()
和getTrace()功能一样,但可以将数组中的元素转成字符串并按一定格式输出

异常机制提供了几个非常关键的好处:
(1) 通过将错误处理集中于catch语句中,你可以将错误处理从应用流程中独立出来。这也使代码的可读性提高,看起来令人愉快。我通常采取非常严格的策略来捕捉所有异常并中止脚本执行。这样可以获得所需的附加的弹性,同时实现安全易用的异常管理。
(2) 重掷异常,将异常数据流从低层传递至高层,就是说异常被传回最适合决定如何处理异常的地方。这看起来会显得有点奇怪,但实际情况中很经常我们在异常发生的时候无法立刻决定如何处理它。
(3) 异常机制提供的Throw/catch避免了直接返回错误标识,方法的返回值是可以由你的类来决定的。其它程序员使用你的代码时,可以指定返回一个他希望的形式,而不需要令人疲倦的不停地测试。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-358917-1-1.html 上篇帖子: JIRA+PHP SOAP Client demo I 下篇帖子: php_encode 转换出乱码的解决
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表