PHP - try/catch 是不是比 if/then 有更高的开销?
Posted
技术标签:
【中文标题】PHP - try/catch 是不是比 if/then 有更高的开销?【英文标题】: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,异常会更加突出,您不可能错过它们;和意思是一样的。 【参考方案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】:当然可以。但是,让错误处理变得更容易所带来的好处是值得的。
【讨论】:
以上是关于PHP - try/catch 是不是比 if/then 有更高的开销?的主要内容,如果未能解决你的问题,请参考以下文章