【问题标题】:PHP - Does try/catch have a higher overhead than if/then?PHP - try/catch 是否比 if/then 有更高的开销?
【发布时间】:2011-03-26 10:49:50
【问题描述】:

在处理一些遗留代码时,我遇到了大量的 Try/Catch 语句。 Try/Catch 不是他们在我的 Zend 认证课程中教授的东西,而且在 10 年中,我没有与其他使用过它的 PHP 开发人员一起工作。与执行 if 语句相比,Try/Catch 是否有额外的开销?是什么使它比其他选项更受欢迎或更不受欢迎?

【问题讨论】:

  • 一门 PHP 课程没有教授错误处理。
  • @cHao 他可能被教导如何像 php 5 之前的标准一样毫无例外地使用错误处理。我敢打赌,你的语言在创建时也支持一切。
  • @Remus Rusanu:仅错误处理。如果我发现你试图将它们用于普通的流量控制,我将撤销你的计算机权限。
  • 10 年来,您从未与知道自己在做什么的人合作过?
  • @bpeterson76:嗯,如果您使用过 Java,异常会更加突出,您不可能错过它们;和意思是一样的。

标签: php optimization logic


【解决方案1】:

我不认为它们之间真的有关系。

If 语句用于确定分支逻辑。

Try/Catch 是处理发生的错误。可以在 Catch 块中处理会停止程序的异常。

【讨论】:

    【解决方案2】:

    Try/catch 用于错误处理。 If 语句是简单的布尔测试器。他们根本不做同样的事情。您应该使用 if 语句并测试您知道的每个条件,但使用 try/catch 进行异常处理。

    【讨论】:

      【解决方案3】:

      好吧,如果我理解正确的话,try/catch 块会在堆栈中添加一个层。所以是的,它可能存在严重的性能问题。但是,它通过让您在需要的地方处理错误而提供的收益也很重要。 if 语句的开销很小。因此,要直接回答您的问题,是的,try/catch 的开销明显高于 if/then(抛出异常的开销要大得多,因为它会为每次抛出生成回溯)。

      话虽如此,他们都有自己的目的。例外应该用于例外情况。您应该使用它们来检测不属于正常故障范围的问题。例如,如果用户没有在注册页面上输入足够长的密码,您就不会抛出异常。但是,如果您无法连接到数据库来执行注册,则会抛出异常。一种是逻辑错误,一种是需要中断正常程序流程的条件。

      【讨论】:

        【解决方案4】:

        try/catch 的全部意义在于它是非本地的。您可以一次退出多个循环,跳出嵌套的函数调用,从您进入的任何地方逃脱。 if 不能这样做,也不打算这样做。我不知道有关开销,但我强烈而明智地怀疑它比if要多得多。最终,使用适合工作的工具:它们不可互换。

        好的,它们是,但它们不应该互换:)

        更新:许多其他人说try/catch 用于错误处理。他们不是。它们用于异常处理。例如,在许多语言中,试图从迭代器的最后一个元素上获取下一个元素会引发异常;这是对异常的完全有效的使用。每当发生意外情况时,您都可以使用它们,这必须在当前范围之外进行处理(假设您没有提供回调来处理它)。

        【讨论】:

          【解决方案5】:

          当然可以。但是,让错误处理变得更容易所带来的好处是值得的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-06-08
            • 2012-11-21
            • 1970-01-01
            • 2019-11-15
            • 2015-03-27
            • 1970-01-01
            • 2019-04-06
            • 2012-04-27
            相关资源
            最近更新 更多