扩展:finally关键字是什么?

时间:2013-09-16 15:49:27

标签: php

好的,我理解为this question提供的“接受的答案”,但我仍然不清楚我应该在finally块中添加什么样的代码。

如果使用finally是为了获取非捕获的异常并为系统提供一般错误消息而不为用户爆炸,如果捕获到某些异常,则不会出现两条错误消息?

[编辑]

像@MarkBaker所说的那样,“终于”不是为了捕捉未捕获的异常,通用捕获(Exception $ e)就是这样做的。那么......它有用吗?或者,换句话说,在没有最终的try / catch块后,我不能做的finally块是什么?

2 个答案:

答案 0 :(得分:1)

以下说明可能会更好地帮助您了解它的工作原理:

try {
    function1();//this might throw an exception
    function2();//if we want function2 to be executed regardless 
                //if an exception was thrown from function1() - this 
                //is not a good place to call it!
} catch (Exception $e) {
    echo $e->getMessage();
} finally {
    function2();//then the right place to write it will be in a finally clause.
}

当从function1()抛出异常时 - function2()将不会被执行 - 执行将“跳转”到catch部分。如果我们希望执行function2()而不管是否抛出错误,例如,如果function1()打开与数据库的连接并运行一些选择并且function2()关闭该连接,那么我们' d最好将function2()的调用放在finally

之后的catch块中

答案 1 :(得分:0)

'finally'块应该包含您想要执行的代码,而不管try / catch块的结果如何。例如,如果尝试查询数据库并捕获错误,则无论数据库操作是否成功,您仍可能希望关闭数据库连接。见下文:

open_database_conn();
try{
  query_database();
  return_result();
}
catch(Exception $e){
  echo $e->getMessage();
}
finally{
  close_database_conn();
}