【发布时间】:2013-09-20 20:24:44
【问题描述】:
好的,我理解为 this question 给出的“已接受的答案”,但我仍然不清楚应该在 finally 块中放入什么样的代码。
如果finally的使用是为了让未被捕获的异常抛出,并给系统一个通用的错误信息,不会为用户爆炸,如果捕获了一些异常,不会为用户显示两条错误信息吗?
[编辑]
就像@MarkBaker 所说,“finally”不是为了捕获未捕获的异常,通用的 catch(Exception $e) 就是这样做的。所以……它有什么用?或者换句话说,在没有finally的try/catch块之后,finally块做了什么我不能做的?
【问题讨论】:
-
finally的使用不是to get the non-catched exceptions thrown and give a general error message,您使用通用的catch(Exception $e)...finally用于无论是否捕获异常都是常见的代码(例如关闭文件句柄) -
我不知道是否有 PHP 特定的答案,或者是否可以使用 try/catch/finally 最佳实践。 stackoverflow.com/questions/1158667/…
-
@MikeB - 我认为当这个人说即使 try/catch 块退出或抛出另一个异常,finally将执行,这将是不同的,因为所有其余的代码都不会,但我在这里尝试过,如果我退出或在 try 或 catch 块内抛出另一个异常,finally 和其余代码(这些块之后的任何内容)具有相同的行为。
-
@MarkBaker - 我看不出一般的 catch(Exception $e) 如何获得未捕获的异常。我必须创建与抛出的异常类具有完全相同名称的 catch 块,并且如果我可以预见“抛出新异常”并且可以预见“抛出新 AnyException”,则不会导致任何未捕获的异常。
-
您的 catch 块不必是“确切名称”:异常具有扩展层次结构,并且所有扩展都扩展
Exception作为它们的曾祖父,然后catch(Exception $e)将捕获任何异常未被捕获中的其他显式异常类名显式捕获。如果我有 3 个不同的子异常都扩展了 PDO_Exception,那么catch(PDO_Exception $e)将捕获这三个中的任何一个
标签: php