一个正规的程序或项目不但代码优美,可读性强,而且错误和异常处理信息也要明确直观,这样对我们以后的项目维护带来很大的方便性,好了,咱们就一一介绍下吧:
一、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,否则无效。分别为是否存在错误,错误信息,错误文件,错误行号.
注:如果代码设置了set_error_handler处理了相应的error则不会在php\logs\目录下写错误日志了,同样exceptio捕获了也不会写入日志里了。
error_log()向日志文件中写日志
四、异常处理机制
异常处理机制是在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()
跟踪异常每一步传递的路线,存入数组,返回该数组
getTrace()
跟踪异常每一步传递的路线,存入数组,返回该数组
getTraceAsString()
和getTrace()功能一样,但可以将数组中的元素转成字符串并按一定格式输出
异常机制提供了几个非常关键的好处:
(1) 通过将错误处理集中于catch语句中,你可以将错误处理从应用流程中独立出来。这也使代码的可读性提高,看起来令人愉快。我通常采取非常严格的策略来捕捉所有异常并中止脚本执行。这样可以获得所需的附加的弹性,同时实现安全易用的异常管理。
(2) 重掷异常,将异常数据流从低层传递至高层,就是说异常被传回最适合决定如何处理异常的地方。这看起来会显得有点奇怪,但实际情况中很经常我们在异常发生的时候无法立刻决定如何处理它。
(3) 异常机制提供的Throw/catch避免了直接返回错误标识,方法的返回值是可以由你的类来决定的。其它程序员使用你的代码时,可以指定返回一个他希望的形式,而不需要令人疲倦的不停地测试