一尘不染

何时使用Try Catch块

php

好的,这可能是一个非常愚蠢的问题,但是我发现关于此的PHP文档以及一些Internet搜索并没有使我对此有所任何了解。

什么时候应该使用try-catch块来改进我的应用程序?

我读过有人说我们应该仅使用try-
catch块来防止致命错误。我读过别人的话说,我们应该只在意外错误上使用它(等什么?意外?如果它们是意外错误,如何使用try-
catch防止它们出现?我应该将所有应用程序代码放在try块中吗?)。其他人只是说try-
catch块应该在任何地方使用,因为它们也可以扩展(扩展Exception类)。最后有人说PHP try-
catch块完全没有用,因为它们实现起来很糟糕。(在此我发现了一个关于性能的很好的SO问题)。

在我看来,这个话题非常奇怪和困惑。有人可以照亮我吗?


阅读 280

收藏
2020-05-29

共1个答案

一尘不染

在我看来,这个话题非常奇怪和困惑。有人可以照亮我吗?

绝对是 我不是PHP用户,但是在ActionScript,Java和JavaScript中使用try /
catch后,可能会有所了解。但是请记住,不同的语言和平台会鼓励尝试/捕获的不同用法。那个…

我唯一建议使用try / catch的情况是,如果您使用的是

  1. 会抛出错误/异常
  2. 没有提供任何工具来检测您是否会做一些愚蠢的事情来导致该错误/异常。例如:在ActionScript中,关闭未打开的加载器会导致错误,但该加载器没有isOpen属性要检查,因此您不得不将其包装在try / catch中,以使本来完全没有意义的错误静音。
  3. 错误/异常 确实 毫无意义。

让我们以列出的示例为例,看看它们如何与该列表相符。

我读过有人说我们应该仅使用try-catch块来防止致命错误。

对于AS的loader.close()函数,这是一个很好的建议。这是一个致命的错误,而所有其他错误都是由于这种错误而造成的。另一方面,AS中几乎所有的错误都会使您的应用程序停止。然后将它们全部包装在try
/
catch中吗?绝对不!由于某种原因,“致命错误”是致命的。这意味着发生了非常严重的错误,并且应用程序在潜在的“未定义”状态下继续运行非常困难。最好知道发生了一个错误然后再解决它,而不是随它去。

我读过别人的话说,我们应该只在意外错误时使用它

更糟的是。这些通常是您不想消除的错误,因为使它们静音意味着您永远不会找到它们。也许您没有吞下它们,但是…可能正在记录它们。但是,为什么您会尝试/捕获/记录/继续,好像什么都没发生一样,从而使程序在潜在的危险和意外情况下运行?只需让错误让您大吃一惊,然后修复它即可。除了尝试调试别人编写的程序中的错误之外,没有其他比这更令人沮丧的了,因为他们将所有内容包装在try
/ catch块中,然后被忽略记录。

其他人只是说try-catch块应该在任何地方使用,因为它们也可以扩展(扩展Exception类)。

如果您是一个正在抛出的人,并且您正试图提醒自己程序中的异常情况,那么这可能有好处。但是为什么要尝试/捕获自己的抛出错误呢?让它踢您的牙齿,然后修复它,这样您就不再需要抛出错误了。

最后有人说PHP try-catch块完全没有用,因为它们实现起来很糟糕。(对此,我发现了一个关于性能的很好的SO问题)。

可能是吧。我不能回答这个。

所以…这可能是一个宗教问题,我敢肯定有人会不同意我的观点,但是从我的角度出发,这些是我多年来尝试/捕获的经验教训。

2020-05-29