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 有更高的开销?的主要内容,如果未能解决你的问题,请参考以下文章

PHP TRY CATCH具体求解

php try catch 捕获哪些错误

PHP try catch 如何使用

PHP中try{}catch{}的具体用法详解

如何在 PHP 中有效地使用 try...catch 块

JavaScript里的try..catch和if...else有何区别啊