php中的异常与错误

异常是指程序运行中不符合预期情况以及与正常流程不同的状况。错误则属于自身问题,是一种非法语法或者环境问题导致的、让编译器无法通过检查设置无法运行的情况。

php只有在你throw 一个异常后,才能用try…catch来捕获异常(一般情况下如此,也有部分异常可以自动捕获)。

历史原因导致php的异常处理是不足的,绝大多数情况下,无法自动抛出异常,必须使用if…else先进行判断,再手动抛出异常。

1
2
3
4
5
6
7
8
9
10
11
12
13
function customError($errno, $errstr, $errfile, $errline)
{
//自定义错误处理是,手动抛出异常
throw new Exception($errstr);
}
set_error_handler('customError', E_ALL | E_STRICT);
try {
$a = 5/0;
} catch (Exception $e) {
echo '错误信息:', $e->getMessage();
}

fetal error这样的错误无法捕获,也无法在发生后恢复流程处理,但是可以使用register_shutdown_function()函数在程序终止或die时触发一个函数,给程序带来一个短暂的回光返照。在php4时,不支持析构函数,也常用于模拟实现析构函数。

Parse error级别的错误,除了修改ini文件,将错误信息写到日志中,什么也做不了。

无论是错误还是异常,都可以使用handler接管系统已有的处理机制。