php异常机制一点注意
一直觉得异常机制的好处,就是避免了无数的if else。在最外边套一个异常,就能捕捉到各种异常的消息,相当省事。但今天发现也不是所有的情况可以笼统的套一个异常。以php为例:
<?phpfunction 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.2Caught 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{}的范围是比较重要的,尤其是在进行一些批处理行为的时候,因为很可能针对每一个输入,都需要监控器异常情况,如果仅仅只是在最外层套一个,很有可能发生异常后就会影响后续代码的执行。