哪个更快,更好,切换案例还是如果?

哪个更好,最快的方法是:如果还是切换?

if(x==1){ echo "hi"; } else if (x==2){ echo "bye"; } switch(x){ case 1 ... break; default; } 

你的第一个例子是错误的。 你需要elseif而不是else

如果您使用if..elseif...或者switch主要是一个偏好的问题。 性能是一样的。

但是,如果所有条件都是x == valuetypes的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只适用于x == yy是一个常数值。

一般情况下, 只要条件数大于3 (为了便于阅读),就使用switch

if / else if / else更灵活(因此更好),但是switch稍快,因为它只计算一次条件,然后检查输出,而if每次都必须这样做。

编辑:看起来像switchif毕竟,我可以发誓,这是不是这样的情况…

根据phpbench.com ,如果/ elseif稍微快一些,尤其是使用严格比较(===)的时候。

在这里输入图像说明

但是,如果你想在一个被称为数千次的函数上减掉微秒,那真的很重要。

这取决于使用情况。 如果你有fxp的状态(在线,离开,dnd,离线…)更好的使用开关。

 switch(status) { case 'online': ... } 

但是,如果你想要这样的事情

 if ((last_reply.ContainsKey(name)) && (last_reply[name] < little_ago)) 

要么

 if (msg.ToString()[0] == '!') 

如果还有其他更好的用途。

我相信,编译器会在一天结束时将它们变成非常相似的,甚至相同的代码。

除非你做了奇怪的事,否则不要尝试为编译器做优化。

另外,开发人员的时间通常比运行时间更重要(除了游戏),所以更好的方法是使其更具可读性和可维护性。

在我看来,“如果/其他”是更快但不比开关更好,但我更喜欢这个:

 echo ($x==1?"hi":($x==2?"bye":"")); 

如果你必须做1,2例如if / else if / else

使用== ,与switch相比, if ... elseif性能几乎相同。 但是,使用===if ... elseif约快3倍(根据: phpbench )。

一般来说,当进行3次以上的比较时,你应该select最易读和使用switch 。 如果性能是一个主要问题,并且不需要进行任何types转换,那么使用if ... elseif===