发新话题
打印

ThinkPHP异常处理机制 - 异常、错误和调试

ThinkPHP异常处理机制 - 异常、错误和调试

异常处理是任何应用开发都会频繁涉及的,大家应该都清楚,PHP4是不支持异常处理的。但是ThinkPHP实现了兼容PHP4和PHP5的异常处理机制,隐藏了系统内部的异常处理兼容环节,呈现给开发人员的异常接口无论是PHP4还是PHP5都是一致的。
在App应用类中,使用了AppError和AppException方法来自动处理错误(包括警告等)和异常,如果要手动抛出错误和异常,需要使用trigger_error和throw_exception方法。

错误处理
ThinkPHP框架只是对E_USER_ERROR级别的错误会中止执行,抛出错误。其他方式的错误只是记录在日志队列中(为了提高文件写入效率,这里并没有写任何日志文件)。不过,前提是开启日志写入参数WEB_LOG_RECORD。如果要手动抛出错误,可以使用trigger_error方法。
在应用执行结束,执行析构函数的时候,系统统一把发生的错误写入日志文件。

异常处理
ThinkPHP的自定义自动异常处理方法很简单,为了便于手动抛出知道的异常信息,框架定义了throw_exception方法。ThinkPHP的throw_exception方法兼容了PHP4和PHP5的异常处理机制,因此,无论是PHP4和PHP5环境下面,都使用throw_exception方法手动抛出异常,当然,如果你使用的是PHP5以上版本,同样也可以使用throw 关键字来抛出异常。但是,并不建议,因为框架的throw_exception方法在PHP5以上版本也会自动使用throw关键字来抛出异常,呵呵,看个人习惯了。
throw_exception方法支持三个参数:
$msg 异常信息,必须
$type 异常类型,即异常类的名称,默认是系统异常基础类FcsException
$code 异常代码 默认为0
如果指定的异常类型不存在,系统自动调用halt方法直接输出异常信息文字,而不输出异常详细信息。

下面是一些使用例子:

  • throw_exception('新增失败');
  • throw_exception('信息录入错误','InfoException');


调试模式下的异常错误页面显示了很多的系统信息,某些信息是不建议公开的,所以,在正式生成环境下面,应该关闭调试模式。其中的错误信息通过设置配置文件中的ERROR_MESSAGE参数定义。

并且ThinkPHP框架支持自定义错误页面,可以在发生错误之后统一指向指定的出错URL页面。通过设置配置文件中的ERROR_PAGE参数来控制。

页面调试
ThinkPHP框架为系统开发人员在调试应用程序也提供了一定程度的方便性,主要实现了下面的方法。
halt($msg) 输出错误信息,并中止执行
system_out($msg) 输出调试信息到日志文件
dump($var, $label=null, $echo=true) 输出变量信息
__DEBUG_START($label='') 记录调试开始时间
__DEBUG_END($label='') 输出调试范围运行时间(相同label属于一个调试范围)
get_include_contents($filename) 获取载入文件的内容
新版的ThinkPHP中还提供了Debug类来进行更加详细的处理。
良好的运用这些调试方法,可以在没有调试工具的条件下给开发工作带来效率的提高。
神迹兄~~好久不见鸟~~~

TOP

发新话题