【问题标题】:Switch vs if statements切换与 if 语句
【发布时间】:2010-11-22 02:32:19
【问题描述】:

我进退两难了。哪个最好用,为什么.. switch 或 if?

switch ($x) 
{
case 1:
  //mysql query 
  //echo something
  break;
case 2:
  //mysql query 
  //echo something
  break;
}

...

if ($x == 1) {
    //mysql query 
    //echo something    
} 

if ($x == 2) {   
    //mysql query 
    //echo something
}  

【问题讨论】:

标签: php if-statement conditional switch-statement


【解决方案1】:

它们有不同的含义。

第一个例子会在条件满足时停止。

第二个将测试$x 两次。

您可能希望将第二个if 设为else if。这意味着一旦一个条件评估为 true,该块将被跳过。

但如果您想知道哪一个最快,您应该考虑哪个最有效地传达了我想要做的事情。它们都很可能最终成为目标架构中的条件跳转。

过早的优化......(你知道其余的:P)

【讨论】:

  • 你提出了一个很好的观点,尤其是我的广泛例子!为此,我投票您的答案正确:)
【解决方案2】:

当有两个以上的选择时,切换会更好。它主要是为了代码的可读性和可维护性,而不是性能。

正如其他人指出的那样,您的示例并不相同。

【讨论】:

    【解决方案3】:

    switch 语句会更快,因为它只检查一次值。

    【讨论】:

      【解决方案4】:

      首先你所拥有的不一样

      switch(value)
        case condition1:
          break;
        case condition2:
          break
      
      if (condition1) {
      }
      if (condition2) {
      }
      

      这些是同义词

      switch(value)
        case condition1:
          break;
        case condition2:
          break
      
      if (condition1) {
      }
      else if (condition2) {
      }
      

      其次,如果您在谈论我的第二个示例,其中两者是同义词。然后使用switch 语句可以减轻编写大量if ..else if 语句时的一些痛苦......

      在我看来,开关也可以提供更多的可读性。但即便如此,有时使用 if...else 会更好,尤其是对于复杂的逻辑。

      【讨论】:

      • +1 for 有时使用if... else 会更好...我发现自己总是使用带有布尔值的 if 语句,因为它提供了更轻松的流程。
      【解决方案5】:

      如果您有一个变量,一组可能的值,并且您想对每个值执行不同的操作,这就是 switch-case 的用途。

      Switch 语句更清楚地表明您只是在确定变量具有哪些允许值。

      如果您有更复杂的条件,或者需要考虑多个变量,请使用 if 语句。

      【讨论】:

        【解决方案6】:

        这两个语句都是通过比较某种参数然后显示结果的决策语句。 switch 语句无疑比 if 语句快,但是 if 语句比 switch 语句有更大的优势,那就是当你必须使用像 (,=,!=,==) 这样的逻辑运算时.每当您遇到逻辑操作时,您都会被 switch 语句打断,但不要担心还有另一种方法可以用来达到您的目标,即 if-statement 或 if-else 或 if-else-if陈述。我建议您在大多数情况下使用 if-else 而不是 switch one。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多