自动捕获的异常会发生什么?

时间:2013-05-31 19:50:23

标签: php exception exception-handling handler

假设有一个代码:

try {
    $i = 0;
    while ($i < 10) {
        if ($i == 7) {
            throw new Exception("Test exception");
        }
        $i++;
    }
} catch (Exception $e) {
}
print($i);

这将返回7。当捕获到try块中的第一个Exception时,程序将执行catch块然后在该块下面继续(不是?)。

然而,当我设置一个自动异常处理程序(set_exception_handler())时会发生什么?当我运行此代码时,我没有得到返回值:

function the_handler($e) {
}
set_exception_handler('the_handler');
$i = 0;
while ($i < 10) {
    if ($i == 7) {
        //throw new Exception("Test exception");
    }
    $i++;
}
print($i);

为什么?调用异常处理程序后到底发生了什么?

1 个答案:

答案 0 :(得分:1)

PHP manual说:

  

执行将在调用exception_handler之后停止。

有关许多特殊情况,请参阅手册页上的讨论,例如:在异常处理程序中抛出异常时。