11/16/2008

if 和 switch 语句效率比较

在 switch 语句中条件只求值一次并用来和每个 case 语句比较。在 elseif 语句中条件会再次求值。如果条件比一个简单的比较要复杂得多或者在一个很多次的循环中,那么用 switch 语句可能会快一些。

以上为 php 手册在叙述 switch 中的一句,该怎么理解呢?

从整体效率上看,是相当的。但区别存在于呢?举个例子


if ($noizy==1) {

echo "noizy1";

} elseif ($noizy==2) {

echo "noizy2";

} elseif ($noizy==3) {

echo "noizy3";

}

以上是 if 代码的一个片段,在最差的状况下,也就是当 $noizy = 3 时,共运行了3次比较,而且,每次比较都必须取出 $noizy 的值一次。如果换成 switch

switch ($noizy) {
case 1:
echo "1";
break;
case 2:
echo "2";
break;
case 3:
echo "3";
break;
}

只在开头 switch 的括号中取出 $noizy 的值,然后把值与case值逐一进行比较

效率的差别就在这儿,因此我总结几点:

1.当只进行一次比较时,推荐使用 if,原因很简单,此时 if 与 switch 没有本质区别,而用 if 代码较为简洁,省去多余字节,可乐而不为?
2.当多次纯粹的比较数字或字符时,推荐使用 switch,当进行N次比较,switch 只取值一次,而 if …… elseif 则取值 1 <= x <= N (x 为实际次数)。
3.当遇到复合条件时,应该视情况而灵活运用 if 与 switch。

No comments: