使用一些遗留代码,我遇到了大量的Try / Catch语句。 Try / Catch不是他们在我的Zend认证课程中教授的东西,并且在10年后我没有与另一位使用它的PHP开发人员合作过。与if语句相比,Try / Catch是否有额外的开销?是什么让它或多或少比其他选择更令人满意?
答案 0 :(得分:9)
我认为他们并不真正相互关联。
如果语句用于确定分支逻辑。
Try / Catch用于处理发生的错误。可以在Catch块中处理可以暂停程序的异常。
答案 1 :(得分:3)
Try / catch用于错误处理。如果语句是简单的布尔测试器。他们根本不做同样的事情。您应该使用if语句并测试您知道的每个条件,但使用try / catch进行异常处理。
答案 2 :(得分:3)
好吧,如果我理解正确,try / catch块会向堆栈添加一个层。所以是的,它可能存在重大的性能问题。但是,它通过让您在需要的地方处理错误而提供的收益也很重要。 if
语句的开销很小。所以要直接回答你的问题,是的,try / catch的开销明显高于if / then(抛出异常有更多的开销,因为它会为每次抛出生成一个回溯)。
话虽如此,他们都有自己的目的。例外条件应该用于例外情况。您应该使用它们来检测那些不在正常故障范围内的错误。例如,如果用户未在注册页面上输入足够长的密码,则不会抛出异常。但是如果无法连接到数据库以执行注册,则会抛出异常。一个是逻辑错误,另一个是需要中断正常程序流的条件。
答案 3 :(得分:2)
try/catch
的重点在于它是非本地的。您可以一次退出多个循环,突破嵌套函数调用,从任何进入的地方逃脱。 if
不能这样做,而且不是这样的。我没有知道有关开销,但我强烈而且明确地怀疑它比 还要多。最终,使用适合工作的工具:它们不可互换。
好的,他们是,但他们不应该互换:)。
更新:许多其他人说try/catch
用于处理错误。他们不是。它们用于异常处理。例如,在许多语言中,尝试从迭代器的最后一个元素获取下一个元素将引发异常;这是异常的完全有效使用。您可以在发生意外情况时使用它们,这些事件必须在当前范围之外处理(假设您没有提供回调来处理它)。
答案 4 :(得分:1)
当然可以。但是,使错误处理变得更容易获得的收益是值得的。