代码之家  ›  专栏  ›  技术社区  ›  bpeterson76

php-try/catch是否比if/then有更高的开销?

  •  3
  • bpeterson76  · 技术社区  · 14 年前

    在一些遗留代码中,我遇到了大量的try/catch语句。Try/Catch不是他们在我的Zend认证课程中教过的东西,10年来我还没有和使用过它的另一个PHP开发人员合作过。与doing if语句相比,try/catch是否有额外的开销?什么会使它比其他选择更可取或更不可取?

    5 回复  |  直到 14 年前
        1
  •  2
  •   Amadan    14 年前

    整个要点 try/catch 它是非本地的。你可以一次退出多个循环,打破嵌套函数调用,从你进入的任何地方逃脱。 if 不能这样做,也不是故意的。我不 知道 关于开销,但我强烈而知情 犯罪嫌疑人 它比 如果 . 最后,使用适合工作的工具:它们不能互换。

    好吧,是的,但不能互换。)

    更新:很多人都这么说 尝试/捕捉 用于错误处理。它们不是。它们用于异常处理。例如,在许多语言中,试图从迭代器的最后一个元素上获取下一个元素会引发异常;这是对异常的完全有效的使用。每当发生意外事件时,您可以使用它们,这些意外事件必须在当前作用域之外处理(假设您没有提供处理它的回调)。

        2
  •  9
  •   Fosco    14 年前

    我不认为他们真的有联系。

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

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

        3
  •  3
  •   Brad    14 年前

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

        4
  •  3
  •   ircmaxell    14 年前

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

    这么说,他们都有自己的目的。例外情况应该用于例外情况。您应该使用它们来检测出不在正常失败范围内的错误。例如,如果用户没有在注册页面上输入足够长的密码,则不会引发异常。但如果您无法连接到数据库来执行注册,则会抛出异常。一个是逻辑错误,另一个是需要中断正常程序流的条件。

        5
  •  1
  •   Ignacio Vazquez-Abrams    14 年前

    当然可以。但是,让错误处理变得如此简单所获得的收益是值得的。