If you're coming from another language that does not have the "elseif" construct (e.g. C++), it's important to recognise that "else if" is a nested language construct and "elseif" is a linear language construct; they may be compared in performance to a recursive loop as opposed to an iterative loop. <?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 . " seconds\n";$start=array_sum(explode(" ",microtime()));eval($nospace);$end=array_sum(explode(" ",microtime()));echo $end-$start . " seconds\n";?>This test should show that "elseif" executes in roughly two-thirds the time of "else if". (Increasing $limit will also eventually cause a parser stack overflow error, but the level where this happens is ridiculous in real world terms. Nobody normally nests if() blocks to more than a thousand levels unless they're trying to break things, which is a whole different problem.)There is still a need for "else if", as you may have additional code to be executed unconditionally at some rung of the ladder; an "else if" construction allows this unconditional code to be elegantly inserted before or after the entire rest of the process. Consider the following elseif() ladder:<?phpif($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(); }?>To insert unconditional preprocessing code for $e onward, one need only split the "elseif":<?phpif($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(); }}?>The alternative is to duplicate the unconditional code throughout the construct.