1

好的,我理解为这个问题给出的“接受的答案” ,但我仍然不清楚我应该在 finally 块中放入什么样的代码。

如果finally的使用是为了让未被捕获的异常抛出,并给系统一个通用的错误信息,而不是为用户爆炸,如果捕获了一些异常,不会出现两个错误信息给用户吗?

[编辑]

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

4

2 回答 2

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()打开到 DB 的连接并运行一些选择并function2()关闭该连接,那么我们最好将调用放在后面function2()finally块中catch

于 2013-09-16T15:58:45.903 回答
0

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

open_database_conn();
try{
  query_database();
  return_result();
}
catch(Exception $e){
  echo $e->getMessage();
}
finally{
  close_database_conn();
}
于 2013-09-16T16:13:53.560 回答