PHP-try/catch的开销是否比if/then高?

PHP-try/catch的开销是否比if/then高?,php,optimization,logic,Php,Optimization,Logic,在使用一些遗留代码时,我遇到了大量Try/Catch语句。Try/Catch不是我的Zend认证课程中教的东西,10年来我没有与其他使用过它的PHP开发人员合作过。与执行if语句相比,Try/Catch是否有额外的开销?什么会使它比其他选项更可取或更不可取?当然。但是,从错误处理中获得的好处是值得的。 < P>我不认为它们真的是相互关联的。 If语句用于确定分支逻辑 Try/Catch用于处理发生的错误。停止程序的异常可以在Catch块中处理。Try/Catch用于错误处理。If语句是简单的布尔

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

当然。但是,从错误处理中获得的好处是值得的。

< P>我不认为它们真的是相互关联的。 If语句用于确定分支逻辑


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

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

try/catch的关键在于它是非本地的。您可以一次退出多个循环,中断嵌套函数调用,从您进入的任何地方转义<代码>如果不能这样做,并且不打算这样做。我不知道开销是多少,但我强烈而有根据地怀疑它比假设的要多得多。最终,要正确使用工具:它们是不可互换的

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


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

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


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

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