如果您來自另一種沒有 "elseif" 結構的語言(例如 C++),那麼重要的是要認識到 "else if" 是一個巢狀語言結構,而 "elseif" 是一個線性語言結構;它們在效能上可以比作遞迴迴圈與迭代迴圈。
<?php
$limit=1000;
for($idx=0;$idx<$limit;$idx++)
{ $list[]="if(false) echo \"$idx;\n\"; else"; }
$list[]=" echo \"$idx\n\";";
$space=implode(" ",$list);| $nospace=implode("",$list); $start=array_sum(explode(" ",microtime()));
eval($space);
$end=array_sum(explode(" ",microtime()));
echo $end-$start . " 秒\n";
$start=array_sum(explode(" ",microtime()));
eval($nospace);
$end=array_sum(explode(" ",microtime()));
echo $end-$start . " 秒\n";
?>
這個測試應該會顯示「elseif」的執行時間大約是「else if」的三分之二。(增加 $limit 最終也會導致解析器堆疊溢位錯誤,但發生這種情況的層級在現實世界中是荒謬的。除非他們試圖破壞程式,否則通常沒有人會將 if() 區塊嵌套到超過一千層,這是一個完全不同的問題。)
仍然需要「else if」,因為您可能有一些額外的程式碼需要在階梯的某一級無條件地執行;「else if」結構允許在整個流程之前或之後優雅地插入此無條件程式碼。考慮以下 elseif() 階梯
<?php
if($a) { conditional1(); }
elseif($b) { conditional2(); }
elseif($c) { conditional3(); }
elseif($d) { conditional4(); }
elseif($e) { conditional5(); }
elseif($f) { conditional6(); }
elseif($g) { conditional7(); }
elseif($h) { conditional8(); }
else { conditional9(); }
?>
若要從 $e 開始插入無條件預處理程式碼,只需將 "elseif" 分開即可。
<?php
if($a) { conditional1(); }
elseif($b) { conditional2(); }
elseif($c) { conditional3(); }
elseif($d) { conditional4(); }
else {
....unconditional();
....}
if($e) { conditional5(); }
elseif($f) { conditional6(); }
elseif($g) { conditional7(); }
elseif($h) { conditional8(); }
else { conditional9(); }
?>
另一種方法是在整個結構中複製無條件程式碼。