2010-07-05 59 views
5

我知道这可能是一个简单的问题,但想知道关于此的每一个意见。Switch和IF有什么区别?

在开关和IF函数之间的区别是什么?我可以看到的是,凡是“开关”功能使用“中频”功能也适用于那里..如果我错了我纠正我。

或两者之间的任何性能明智的区别?

+0

我想答案是“它取决于”或“没有性能差异”,但我会首先要求一个例子.. – 2010-07-05 10:39:42

回答

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 { .... } 

编辑:由库亨的评论启发,为了完整性一些benchmarks(结果会有所不同,这是一个活的)。请记住,这些是运行1000次的测试。一对if的差异是完全可以忽略

  • 如果和ELSEIF(使用==)174微秒
  • 如果,ELSEIF和else(使用==)223微秒
  • 如果,ELSEIF和else(使用===)130微秒
  • 开关/壳体183 微秒
  • 开关/壳体/默认215微秒

结论(来自phpbench.com)

使用switch /箱或如果/ elseif的几乎是相同的。请注意,测试未执行===(正好等于),并且稍微比使用==(等于)要快。

+0

特别是当有超过3个选项时。+1 – 2010-07-05 10:44:50

+0

完全同意 - 过于强调微观优化总是会牺牲可读性。就个人而言,除了单一的if/else外,为了完整起见,我总是使用switch语句 – robjmills 2010-07-05 10:45:34

+2

,if-else比switch更快一些。但是,在这个级别(尤其是PHP)可读性>性能。 – Kuchen 2010-07-05 10:53:23

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。

0

不过,不要忘记,开关并不一定是简单的if语句。记住,在每种情况结束时交换机不需要中断,并且让中断可以让你'跌入'下一个案例,也可以允许一些有趣而复杂的'ifs'。

2

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

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

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

+0

关于设计的好处。一个巨大的switch语句在一个循环中几乎总是会变得更好,或者出现错误。 – 2010-07-05 11:47:00

相关问题