if和switch哪个更好、更快?
if(x==1){
echo "hi";
} else if (x==2){
echo "bye";
}
switch(x){
case 1
...
break;
default;
}
if和switch哪个更好、更快?
if(x==1){
echo "hi";
} else if (x==2){
echo "bye";
}
switch(x){
case 1
...
break;
default;
}
你的第一个例子是错误的,你需要使用elseif
而不是只有else
。
如果你使用if..elseif...
或者switch
主要取决于个人喜好,它们的性能是相同的。
然而,如果所有条件都是形如x == value
的,其中x
在每个条件中都是一样的,那么使用switch
通常是有意义的。另外,我只会在有两个以上条件时才使用switch
。
当变量部分是函数调用时,switch
实际上可以提高性能:
switch(some_func()) {
case 1: ... break;
case 2: ... break;
}
然后,只有在使用some_func()
时才会调用一次。
if(some_func() == 1) {}
elseif(some_func() == 2) {}
如果这样写会导致函数调用两次——包括函数可能造成的副作用。不过,你可以使用 $res = some_func();
然后在你的 if
条件中使用 $res
,这样就可以完全避免这个问题。
当你有更复杂的条件时,你无法使用 switch。因为 switch
只适用于常量值的 x == y
情况。
= 0:
...;
break;
}
- SenseExceptionIn PHP, you can also write 'else if' (in two words) and the behavior would be identical to the one of 'elseif' (in a single word).
- A Friendphpbench.com
网站中的相关部分,并在答案中直接引用重要的内容。我将编辑您的帖子以展示格式良好的答案是什么样子。 - Hurricane Development一般规则是在条件数量大于3的情况下使用switch
(为了可读性)。
if
/ else if
/ else
更加灵活(因此更好),但switch
稍微更快,因为它只计算一次条件,然后检查输出,而if
每次都要这样做。
编辑:看起来switch
比if
慢,毕竟如此,请参考http://www.phpbench.com/
if / else if
比 switch 语句更易于阅读,因为它们的大括号可以快速地带你进入代码块,而在 switch 语句中,找到 break 语句需要一些运气。而在 if 语句中,即使是记事本也会跟踪大括号并提供缩小代码块的选项。 - user889030==
时,if ... elseif
与switch
的性能几乎相同。然而,使用===
时,if ... elseif
的速度大约快3倍(根据:phpbench)。switch
。如果性能是主要问题,并且不需要进行任何类型转换,则使用带有===
的if ... elseif
。Switch比if更快,因为switch使用跳转表,跳转表由编译器在编译时制作并由CPU /操作系统运行。例如,如果您有100个情况,并且您将在第100个情况中获得值,那么您认为它会运行所有99个条件吗?不会的,它将通过跳转表直接跳转到第100个情况。那么我们如何证明这一点呢?如果你在开头写default语句然后运行程序,你会得到默认值吗?不会,由于跳转表,你会得到你想要的答案。它知道默认值在哪里,你分配的值在哪里,它将直接带你到你想要的答案。 谈论哪个更好... if可以完成的每项工作都可以在switch中完成。 但对于较少的条件,if更好;对于更多的条件,switch更好。例如,在3个条件以下,if是好的。之后,一个好的程序员使用switch。就是这样
这要看具体用途。如果您的 FXP 状态(在线、离开、请勿打扰、下线)...),最好使用开关(switch)。
switch(status)
{
case 'online':
...
}
if ((last_reply.ContainsKey(name)) && (last_reply[name] < little_ago))
if (msg.ToString()[0] == '!')
最好使用if else语句。
我相信编译器最终会将它们转换为非常相似甚至相同的代码。
除非你在做一些奇怪的事情,否则不要试图为编译器进行优化。
此外,开发人员的时间通常比运行时间更重要(游戏除外),因此最好使其更易读和可维护。
在我看来,“if/else”比“switch”更快,但并不比它更好。但是我更喜欢这个:
echo ($x==1?"hi":($x==2?"bye":""));
如果你必须要做1,2种情况,比如if/else if/else
x
和1
是如何比较的?没错,内部也执行了一个==
比较。 - ThiefMaster