【问题标题】:What is the difference between Switch and IF?Switch和IF有什么区别?
【发布时间】:2011-03-11 20:44:53
【问题描述】:

我知道这可能是一个简单的问题,但想知道每个人对此的看法。

PHP中的switch和if函数有什么区别??我所看到的是“开关”功能使用“IF”功能的地方也适用..如果我错了请纠正我..

或者两者之间的任何性能差异??

【问题讨论】:

  • 我猜答案是“视情况而定”或“没有性能差异”,但我想先举个例子..

标签: php


【解决方案1】:

或者两者之间的任何性能差异??

忘记这个级别的性能差异 - 可能存在微观差异,但只有在执行数十万次操作时才会感觉到它,如果有的话。 switch 是一种提高代码可读性和可维护性的构造:

switch ($value) 
 {
 case 1:   .... break;
 case 2:   .... break;
 case 3:   .... break;
 case 4:   .... break;
 case 5:   .... break;
 default:  .... break;
 }

更简洁易读
if ($value == 1) { .... }
elseif ($value == 2) { .... }
elseif ($value == 3) { .... }
elseif ($value == 4) { .... }
elseif ($value == 5) { .... }
else { .... }

编辑: 受 Kuchen 评论的启发,为了完整起见,一些 benchmarks (结果会有所不同,这是现场直播)。请记住,这些测试会运行 1,000 次。几个if 的区别完全可以忽略

  • if 和 elseif(使用 ==)174 µs
  • if、elseif 和 else(使用 ==)223 µs
  • if、elseif 和 else(使用 ===)130 µs
  • 开关/情况183 µs
  • 开关/案例/默认215 µs

结论(来自 phpbench.com)

使用 switch/case 或 if/elseif 几乎相同。请注意,测试不使用 ===(完全等于),并且比使用 ==(等于)稍快。

【讨论】:

  • 尤其是当有超过 3 个选项时.. +1
  • 完全同意——过分强调似乎总是牺牲可读性的微优化。就个人而言,对于单个 if/else 之外的任何事情,我总是使用 switch 语句
  • 为了完整起见,if-else 比 switch 快一点。但同样,在这个级别(尤其是 PHP)可读性 > 性能。
  • @Kuchen 糟糕的点。这不是OP询问的区别。不值得一提,因为会误导所有这些无知的猴子希望。 PHP 已经遭受了可怕的性能错误信念的困扰,而您只是添加了它。这些什么都不测试的愚蠢测试比根本没有测试要糟糕得多
【解决方案2】:

如果您有简单的条件,例如某事物等同于其他事物,那么开关是理想的。

例如,不要执行以下操作:

if($bla == 1) {

} elseif($bla == 2) {

} elseif($bla == 3) {

} etc...

最好这样做:

switch($bla) {
  case 1:
    ...
    break;
  case 2:
    ...
    break;
  case 3:
    ...
    break;
  default:
    ...
    break;
}

或者,如果您有复杂的条件,您应该使用 if/else。

我认为这完全是一个见仁见智的问题 - 有些人根本不使用 switch 语句,而是坚持使用 if/else。

【讨论】:

    【解决方案3】:

    但不要忘记,switch 不一定像简单的 if 语句一样工作。记住,切换不需要在每个案例结束时中断,并且离开该中断允许您“通过”到下一个案例,也可以允许一些有趣且有些复杂的“如果”。

    【讨论】:

      【解决方案4】:

      不,你是对的。
      这些陈述之间没有太大区别。
      你可以用你喜欢的。

      请记住,如果您必须使用超过 3-4 个连续条件 - 这意味着您很可能存在设计错误。

      通常您可以用循环或更清晰的应用程序设计替换这样的语句。

      【讨论】:

      • 关于设计的要点。一个巨大的 switch 语句在循环中几乎总是会更好,否则会出错。
      【解决方案5】:

      Switch Case 语句是 if/else 语句的替代方案,它的作用几乎相同。 Switch Case 语句逐行或逐语句执行,换句话说,一旦 PHP 找到一个计算结果为 true 的 case 语句,它就会执行与该 case 语句对应的代码。 if/else 和 switch 语句的根本区别在于 if/else 语句根据 if 语句中表达式的评估来选择语句的执行,但 Switch Case 语句通常基于键盘来选择语句的执行命令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-09
        • 1970-01-01
        • 2011-03-25
        • 2013-11-18
        • 1970-01-01
        • 2011-03-24
        • 1970-01-01
        相关资源
        最近更新 更多