§ ITPOW >> 文档 >> PHP

PHP 实用教程-错误和异常处理

作者:vkvi 来源:ITPOW(原创) 日期:2009-5-26

发生错误后会终止程序执行吗?

$n = 1 / 0;
echo "end";

不会,也就是说,上面的 end 仍然会执行。

显示错误

当 PHP 程序发生错误时,如果错误没有显示出来,可能是禁用了错误显示。解决方法是:PHP 目录下 php.ini,display_errors = Off 改为 display_errors = On,重启 Apache。

die()、exit()

这两个函数是一个意思,他们的作用就是抛出一个错误,然后终止程序的执行,它们可以跟一个参数用来输出到客户端以说明发生了什么错误。

除了发生重大的错误,这两个函数意义不大,因为它只是简单地抛出错误,然后野蛮地终止后面程序的执行。

自定义错误处理程序

function processError($error_level, $error_message, $error_file, $error_line, $error_context)
{
    $contents = "错误级别:" . $error_level . "\r\n" .
               "错误信息:" . $error_message . "\r\n" .
               "错误所在文件:" . $error_file . "\r\n" .
               "错误所在行:" . $error_line . "\r\n" .
               "错误相关信息:" . $error_context;
    file_put_contents("log_" . time() . ".txt", $contents);
}
set_error_handler("processError");
$n = 1 / 0;

上述代码中,当错误发生时,不论 display_errors 是 On 还是 Off,都不会将错误输出到客户端,而是由自定义错误处理程序 processError 来执行,当然错误处理程序和注册错误处理程序的代码应该在最前面。错误处理程序的参数个数可以是 0 - 5 个。

如果错误处理程序中又出错了,会不会造成死循环呢?不会,因为,错误处理程序中的错误还是由系统来处理。

异常处理

在 PHP 中用抛出异常用:

throw new Exception("异常信息");

捕获异常有两种方法:

try
{
    throw new Exception("异常信息");
}
catch (Exception $e)
{
    echo $e->getMessage();
}

Exception 对象除了 getMessage() 方法,还有其他一些方法 getCode()、getFile()、getLine() 等。

另外一种捕获异常的方法是使用 set_exception_handler 方法,用法同 set_error_handler,只是异常处理程序只有一个 Exception 类型的参数。

相关文章