哪个更快更好,Switch Case还是其他如果?

Bal*_*cks 65 php performance if-statement switch-statement

哪种方法更好更快:if还是switch?

if(x==1){
  echo "hi";
} else if (x==2){
  echo "bye";
}

switch(x){
  case 1
    ...
  break;
  default;
} 
Run Code Online (Sandbox Code Playgroud)

Thi*_*ter 131

你的第一个例子是完全错误的.你需要elseif而不仅仅是else.

如果您使用if..elseif...switch主要是偏好问题.表现是一样的.

然而,如果所有条件的类型x == valuex是相同的在每一个条件,switch通常是有道理的.switch如果有两个以上的条件,我也只会使用.

其中A的情况下switch,其实是给予你一个性能上的优势是,如果可变部分是一个函数调用:

switch(some_func()) {
    case 1: ... break;
    case 2: ... break;
}
Run Code Online (Sandbox Code Playgroud)

然后some_func()只用一次调用

if(some_func() == 1) {}
elseif(some_func() == 2) {}
Run Code Online (Sandbox Code Playgroud)

它将被调用两次 - 包括函数调用可能发生的两次副作用.但是,您可以随时使用$res = some_func();,然后$res在您的if条件下使用- 这样您就可以完全避免这个问题.

在那里你的情况不能在所有使用开关是当你有更复杂的条件- switch仅适用于x == yy是一个恒定值.

  • 仅仅因为某事是一个例子并不意味着我们无法纠正你...这是非常基本的,我们只是确保你有正确的理解.感谢@ ThiefMaster的帮助,因为他完美地回答了你的问题. (68认同)
  • 复杂的开关案例实际上有一种方法:<?php $ i = //一个int开关(true){case $ i <0:...; 打破; case $ i> = 0:...; 打破; } (4认同)
  • 您已经说过使用 if elseif 或 switch 主要是偏好问题,并且性能是相同的。我不同意你的看法,switch 语句被评估一次,然后将结果与每个案例进行比较,如果 elseif 被一次又一次地评估。为此,我认为取决于条件的位置和方式,一个或另一个将更快和更合适。 (3认同)

小智 25

根据phpbench.com,如果/ elseif略快,特别是在使用严格比较(===)时.

在此输入图像描述

但是,如果你想在一个被称为数千次的函数上削减微秒,那真的很重要.

  • 这是对答案的一个很好的贡献,但您需要为它添加更多信息才能成为有用的答案.至少链接到`phpbench.com`部分并直接引用此答案中的重要部分.我将编辑你的帖子,向你展示一个结构良好的答案. (3认同)

Ali*_*xel 16

只要条件数大于3(为了便于阅读),就会使用switch一般规则.

if/ else if/ else更灵活(因此更好),但switch稍微快一点,因为它只计算一次条件然后检查输出,而if每次都必须这样做.

编辑:似乎switchif毕竟,我发誓这不是这种情况......

  • 在你的基准测试中,只有两个选项执行`switch`和`if/else`.我知道在`C#`例如`switch`将使用查找表,并且在5个选择中开始更快.我已经执行了与基准测试相同的性能测试但是使用了**10**而不是**2**并且`switch`看起来更快! (3认同)
  • *"*一般规则是使用...."*[**[citation needed]**](http://en.wikipedia.org/wiki/Weasel_word).另请参阅http://stackoverflow.com/q/7290889/632951 (3认同)