在PHP中,if / else if语句是否有最快/正确的排序方式?出于某种原因,在我的脑海中,我喜欢认为第一个if语句应该是预期的“最受欢迎”符合条件,然后是第二个等等。但是,它真的重要吗?如果第二个条件是最受欢迎的选择(意味着系统必须始终读取第一个条件),是否会影响速度或处理时间
例如:
if ("This is the most chosen condition" == $conditions)
{
}
else if ("This is the second most chosen condition" == $conditions)
{
}
else if ("This is the third most chosen condition" == $conditions)
{
}
答案 0 :(得分:6)
速度方面,它不会产生任何影响...不是一个明显的...订单确实计数(将最常用的条件放在第一位的速度明显更快),但它并不重要。选择为修改和维护代码提供最佳可读性的顺序。他们以后会感谢你。
编辑: 另外,请考虑一下:
我的功能将以25%的几率返回。 我更喜欢写作:
if ( $chance25 )
return;
else if ( $chance40 )
doSomething();
else if ( $chance30 )
doSomethingElse();
else if ( $chance5 )
doSomethingElse2();
而不是:
if ( $chance40 )
doSomething();
else if ( $chance30 )
doSomethingElse();
else if ( $chance25 )
return;
else if ( $chance5 )
doSomethingElse2();
按功能排序更好......
EDIT2:
一种尺码并不适合所有人。如果您的条件是返回布尔值的方法,请根据方法运行的速度和机会来排序它们。我想这不是一个好的答案,你需要适应。例如,如果我的$ chance25被方法reallySlowMethodDoNotUseUnlessYouReallyHaveTo()
替换,我肯定会最后检查它。 :d
答案 1 :(得分:3)
我同意@Luchian的观点。您的主要关注点应该是代码的可读性
在优化代码之前,您应该对应用程序进行概要分析。您如何订购您的病情在很大程度上取决于“每个条件”花费了多少时间。
我们举一个例子:
Execution time - %ge called
Case 1 - 50 seconds (80% of time)
Case 2 - 10 seconds (15% of time)
Case 3 - 1 second (5% of time)
100 runs:
Order A (In the order of "how often a condition is executed")
Case 1, Case 2, Case 3 = (80 * 50) + (15 * 60) + (5 * 61) = 5205 seconds
Order B (In the order of "execution times")
Case 3, Case 2, Case 1 = (5 * 1) + (15 * 11) + (80 * 61) = 5050 seconds
答案 2 :(得分:1)
您的应用程序可能是一个Web应用程序(因为这是PHP最常用的用法),所以大多数时候它等待外部资源,如数据库,文件访问或Web服务。除非你在循环中执行了数千次,或者在递归方法中,否则首先执行哪种条件并不重要。努力寻找易于阅读的代码。
答案 3 :(得分:0)
取决于您的操作偏好
您可能希望条件2激活而不是条件1,反之亦然
$value=25;
if ($value > 20)
{
$value=200;
}
else if ($value < 50)
{
$value=5;
}
答案 4 :(得分:0)
如果您只是针对多个可能的文字值检查$conditions
的值,而不是if/else
,请使用switch。
switch ($conditions) {
case "This is the most chosen condition":
// do stuff
break;
case "This is the second most chosen condition":
// do stuff
break;
case "This is the third most chosen condition":
// do stuff
break;
default:
// do stuff
}
如果最常见的情况是第一次,它将不必评估任何其他情况,因此会更快,但差异将非常小,以至于它确实无论如何都不重要。通常你应该考虑速度的可读性。