Switch和IF有什么区别?

时间:2010-07-05 10:37:33

标签: php

我知道这可能是一个简单的问题,但想知道每个人的意见。

PHP中的switch和IF函数有什么区别?我能看到的是“切换”功能在哪里使用“IF”功能也适用于那里......如果我错了,请纠正我..

或两者之间的任何表现明智差异?

5 个答案:

答案 0 :(得分:19)

  

或两者之间的任何表现明智差异?

忘记这个级别的性能差异 - 可能是微观的,但是只有在完成数十万次操作时才会感觉到它。 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)

     

使用开关/案例或if / elseif几乎相同。请注意,测试是uning ===(完全等于),并且稍微快于使用==(等于)。

答案 1 :(得分:3)

如果你有简单的条件,比如某些东西等同于其他东西,那么开关是理想的。

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

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。

答案 2 :(得分:2)

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

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

通常,您可以使用循环或更清晰的应用程序设计替换此类语句。

答案 3 :(得分:2)

Switch Case语句是if / else语句的替代方法,它执行几乎相同的操作。换句话说,Switch Case语句逐行或逐条语句执行,并且一旦PHP找到评估结果为true的case语句,它将执行与该case语句相对应的代码。 if / else和switch语句之间的根本区别在于,if / else语句基于对if语句中表达式的求值选择语句的执行,而Switch Case语句通常基于键盘选择语句的执行。命令。

答案 4 :(得分:0)

不要忘记,交换机不一定像简单的if语句那样工作。记住一个开关不需要在每个案例结束时中断并且让那个中断允许你“堕落”到下一个案例,也可以允许一些有趣且有些复杂的“ifs”。