Verzweigungen (Fallunterscheidungen)
Unter dem Begriff Kontrollstrukturen versteht man die Möglichkeit, die Abarbeitungsreihenfolge von Anweisungen. Sowohl Iterationen, als auch Fallunterscheidungen gehören zu den Kontrollstrukturen. Meistens wird die Ausführung von Kontrollstruktur
PHP kennt zwei Arten von Verzweigungen: if und switch.
if - else if - else
Das if-Konstrukt erlaubt die bedingte Ausführung von Programmteilen. Die umgebenen Anweisungen werden nur ausgeführt, wenn die gegebenen Bedingungen zusammen true ergeben.
$a = 2;
$b = 3;
if ($a < $b) {
echo "$a ist kleiner als $b";
}
Das einfache if kann durch ein else erweitert werden. Die Anweisungen im Block des else-Zweigs werden dann ausgeführt, wenn die Bedingungen des if-Zweigs false ergeben.
$a = 2;
$b = 3;
if ($a < $b) {
echo "$a ist kleiner als $b";
} else {
echo "$a ist NICHT kleiner als $b";
}
Für diese Struktur gibt es auch eine Kurzform:
echo ($a < $b ? "$a ist kleiner als $b" : "$a ist NICHT kleiner als $b");
Um weitere Bedingungen prüfen zu können, kennt PHP das elseif, welches zwischen dem if und dem else angeordnet werden muss. Während es immer nur ein if und kein oder ein else gibt, können beliebig viele elseif eingesetzt werden.
$a = 2;
$b = 3;
if ($a < $b) {
echo "$a ist kleiner als $b";
} else if ($a > $b) {
echo "$a ist größer als $b";
} else if ($a == $b) {
echo "$a ist genauso groß wie $b";
} else {
echo "Ich bin ratlos...";
}
Grundsätzlich gilt: Wenn der Anweisungsblock nur aus einer einzigen Anweisung besteht, können die umschließenden geschweiften Klammern weggelassen werden!
Wem diese Schreibweise nicht gefällt, kann auf die alternative Schreibweise, bei der keine geschweiften Klammern verwendet werden, ausweichen:
$a = 2;
$b = 3;
if ($a < $b):
echo "$a ist kleiner als $b";
elseif ($a > $b):
echo "$a ist größer als $b";
elseif ($a == $b):
echo "$a ist genauso groß wie $b";
else:
echo "Ich bin ratlos...";
endif;
switch
Die zweite Verzweigung von PHP ist die switch-Anweisung, die im Grunde nichts anderes als ein if ist mit elseif bei dem immer auf denselben Parameter geprüft werden. Die Anweisung ermöglicht es, eine Variable mit unterschiedlichen Werten zu vergleichen und je nach Ergebnis andere Programmteile ausführen.
Werte, auf die geprüft werden kann, dürfen nur von einfachem Typ (Integer, Float, String) sein. Jeder Wert, auf den geprüft wird, ist ein eigener Fall (case). Trifft ein Fall zu, werden die darauffolgenden Anweisungen bis zum ersten break ausgeführt. Wird kein break gefunden, werden die folgenden Fälle ebenfalls ausgeführt.
Fälle können auch zusammengefasst werden. Sollen für zwei oder mehrere Fälle dieselben Aktionen ausgeführt werden, können die jeweiligen Fälle einfach aufeinanderfolgend notiert werden.
$rand = rand(0,10);
switch ($rand) {
# die Zufallszahl ist 0
case 0:
echo "\$rand ist $rand";
break; # hier endet der case 0
# sowohl für case 1, als auch für case 2 werden die Anweisungen ausgeführt, die nach case 2 stehen.
case 1:
case 2:
echo "\$rand ist 1 oder 2";
break; # hier enden case 1 und 2
case 4:
echo "\$rand ist 4";
# case 4 hat kein break, weshalb case 5 ebenfalls ausgeführt wird, wenn die Zufallszahl 4 ist
case 5:
echo "\$rand ist 5";
break; # der letzte Fall in einem switch benötigt kein break
}
Gibt man in der Bedingung true an, kann man die Fälle mit Ausdrücken belegen.
switch (true) {
case $a == $b:
break;
case $a < $b:
break;
}
Für alle anderen Fälle, die nicht vom switch abgedeckt werden, bei denen aber ebenfalls Aktionen durchgeführt werden sollen, kann ein Standard-Fall mit default definiert werden. Der default-Fall kann an einer beliebigen Stelle in der case-Reihenfolge vorkommen, er wird nur dann ausgeführt, wenn kein anderer Fall zutrifft.
$rand = rand(0,10);
switch ($rand) {
case 0:
echo "\$rand ist $rand";
break;
case 1:
case 2:
echo "\$rand ist 1 oder 2";
break;
# der default-Fall greift nur dann, wenn die Zufallszahl > 5 ist, weil nur die Zahlen 0-5 von den cases geprüft werden
default:
echo "\$rand ist > 5";
break;
case 4:
echo "\$rand ist 4";
break;
case 5:
echo "\$rand ist 5";
break;
}
Auch für das switch-Statement gibt es eine alternative Schreibweise.
$rand = rand (0,3);
switch ($rand):
case 0:
echo "Die Zufallszahl ist 0";
break;
case 1:
echo "Die Zufallszahl ist 1";
break;
default:
echo "Die Zufallszahl ist nicht 0 und nicht 1";
endswitch;

