2010-08-10 119 views
2

在什么情况下我应该使用switch语句而不是在PHP中使用if语句?什么时候最好在PHP中使用switch语句?

+2

值得一提的是,这真的适用于任何具有'switch'等价语言的语言。 – jtbandes 2010-08-10 19:16:33

+2

在C中,在某些情况下,switch语句可能比if语句快得多。你在PHP中没有这种优势。 – Sjoerd 2010-08-10 19:17:55

+0

@jtbandes,Sjoerd:性能可能是OP的关注中最小的,尽管:) – BoltClock 2010-08-10 19:25:15

回答

1

当某个变量可能是多个不同“案例”中的一个时,您可以使用一个开关在IF语句中,如果需要,可以用多个ELSE IF和很长的条件替换此方法。

真的不是一个简单的方法来回答这个问题,因为没有最好的时间来使用开关。只有当你显示代码时,有人可以说“这对于交换机来说会更好。”尽管如此,最终你只能节省几毫秒。

1

如果您有一个if的序列,只需对一个变量测试不同的值,则应该使用switch声明。 switch语句实际上只是用来使代码看起来更清晰,更清晰,所以如果你觉得它的确如此,那就使用它 - 你的直觉可能是对的。

0

从来没有。

  • 你会忘记案件结束时的break语句,这可能会导致不希望的结果。
  • 你只能评估一个条件,否则if是更通用的。
  • 这是丑陋的。

也就是说,有时候你特别需要这种贯穿功能,或者你从每个case语句中的函数返回,这样你就不会忘记break。也许这是一个例外。

+1

嗯?为什么这是-3?这是这里最正确的答案。 PHP'switch'有一个奇怪的'continue',它会做“松散比较”,这基本上使得PHP'switch'与其他所有语言都不同。它也不提供性能奖励。不要在PHP中使用它。 – 2010-08-10 19:33:15

+0

-1:您应该在测试过程中发现任何缺失的中断。有时你只需要测试一个项目。国际海事组织,一堆如果 - else比交换机丑。 – GreenMatt 2010-08-10 19:43:08

+0

未来,即使你是对的,也很难认真回答以戏剧性命令开始的问题。 – 2015-07-03 04:39:45

2

如果您有一系列可以逻辑隔离的相关条件,或者您有一系列条件必须根据单数变量或表达式的状态或结果执行,则应使用开关。

与其他答案相反,开关中的表达式不需要被隔离到单个变量中(尽管它更简单,更易于阅读,并且通常是一个好主意),但是case语句需要从评估的表达式。

一个很好的经验法则是当你有一个容易准备好的表达式,会产生多个结果,然后你必须执行逻辑的基础上使用开关。如果你的表达式是不相关的,只会导致布尔条件,或者变得复杂/相关(比如,如果a然后b,如果c然后b,如果d然后有时b),然后坚持ifs。