php异常机制一点注意

一直觉得异常机制的好处,就是避免了无数的if else。在最外边套一个异常,就能捕捉到各种异常的消息,相当省事。但今天发现也不是所有的情况可以笼统的套一个异常。以php为例:

<?php
function inverse($x) {
    if (!$x) {
        throw new Exception('Division by zero.');
    }
    else return 1/$x;
}
try {
    echo inverse(5) . "\n";
    echo inverse(0) . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
// Continue execution
echo 'Hello World';
?>

运行结果:

0.2
Caught exception: Division by zero.
Hello World

这是php手册上的例子,执行结果很如意。但是如果将

echo inverse(5) . "\n";
echo inverse(0) . "\n";

换一下顺序:

echo inverse(0) . "\n";
echo inverse(5) . "\n";

显然 echo inverse(5) . "\n"; 不会执行,因为对于try{}之间的代码块,发生异常时,就会阻止其范围内后续代码的执行。这时,如果还想后续代码执行,需要将后续代码移出try{}的范围,如果想继续监控后续代码的异常情况,就需要为其单独增加try{}的异常机制。所以注意try{}的范围是比较重要的,尤其是在进行一些批处理行为的时候,因为很可能针对每一个输入,都需要监控器异常情况,如果仅仅只是在最外层套一个,很有可能发生异常后就会影响后续代码的执行。

posted @ 2010-03-31 01:07  戴航  阅读(198)  评论(0编辑  收藏  举报