Else-If-Konstrukt
Else-If dient dazu mehrere If's aneinander zu hängen. Das bringt gegenüber einzelnen If's einen Performance-Vorteil, ausserdem kann so wenn keine Bedienung zutrifft in einen else-Block gesprungen werden. Häufig kann anstelle von langen if-Konstrukten auch ein Switch verwendet werden, dies hat jedoch teilweise gewisse Limitierungen. Zum Beispiel kann in Java ein Switch nur für einfache Typen verwendet werden. Ohne Elseif sieht das dann etwa so aus:
if ($a > $b) {
echo "a is bigger than b";
}
if ($a == $b) {
echo "a is equal to b";
}
if ($a < $b) {
echo "a is smaller than b";
}
In PHP wird elseif zusammengeschrieben und ist ein eigenes Sprachkonstrukt. Das obige Beispiel sieht dann etwa so aus und reduziert die Überprüfungen im Idealfall auf eine und im schlechtesten Fall auf zwei (anstelle von drei):if ($a > $b) {
echo "a is bigger than b";
} elseif ($a == $b) {
echo "a is equal to b";
} else {
echo "a is smaller than b";
}
Die geschweiften Klammern können, sofern sie nur ein einzelnes Statement beinhalten weggelassen werden. Dies gilt für die meisten, wenn nicht alle, C-basierenden Sprachen. In PHP kann das ganze zudem noch mit der nachfolgenden, eher merkwürdigen Syntax (nicht zu empfehlen) verwendet werden:
if ($a == 5):
echo "a equals 5";
echo "...";
elseif ($a == 6):
echo "a equals 6";
echo "!!!";
else:
echo "a is neither 5 nor 6";
endif;
Nun aber der eigentliche Clue, nämlich warum else-if in den meisten Sprach-Syntaxen gar nicht existiert und auch nicht zu existieren braucht am Beispiel von C++. Zuerst ein einfaches If:
if(a < b){
doASmallerB();
}
Nach C++-Standard ist der gesamte Block, ebenso wie der Aufruf der Methode doASmallerB, ein Statement. Nun ein if-Block mit einem Else:if(a < b)
doASmallerB();
else
doBSmallerEqualsA();
Anstelle vom Aufruf von doBSmallerEqualsA kann nun jedes beliebige Statement stehen. Und mit jedem Beliebigen ist natürlich auf ein If-Statement gemeint. Toll! Das sieht dann so aus:
if(a < b)
doASmallerB();
else
if(a > b) {
doABiggerB();
}
Womit wir dann, mit ein bisschen Umformatieren, bereits ein else-if konstruiert hätte. Natürlich lässt sich das beliebig so fortsetzen.





