1. Switch-Abfragen
Bei einer switch-Abfrage handelt es sich um eine spezielle
Art der Kontrollstruktur. Im Gegensatz zu einer if-Abfrage
kann mit einer switch-Abfrage nur ein direkter Vergleich mit einem
Wert durchgeführt werden. Wo es mit if möglich ist komplexe
Abfragen mit logischen Verknüpfungen zu erzeugen verwendet eine
switch-Abfrage intern nur den Vergleichsoperator ==
.
Eine Switch-Abfrage wird mit dem Schlüsselwort switch
eingeleitet.
Danach folgt in runden Klammern den Ausdruck der geprüft werden soll, üblicherweise
eine Variable. Danach folgt der Switchrumpf, eingeleitet und beendet durch
geschweifte Klammern ({}
).
<?php
switch ($var) {
}
?>
Innerhalb des Switchrumpfs fügt man nun case
Zeilen ein, an die
der PHP-Interpreter springt wenn der Ausdruck den selben Wert hat wie der
der hinter dem case
steht. Nach dem case
Ausdruck
folgt dann noch ein Doppelpunkt :
.
<?php
switch ($var) {
case 5: // springe hier hin wenn 5 == $var gilt
case "b": // springe hier hin wenn "b" == $var gilt
}
?>
Dies hat also etwas von einem goto-Befehl, obwohl es in
PHP keine solchen Befehle gibt. Wenn PHP zu einem case-Block
hinspringt führt er den PHP-Code an dieser Stelle aus. Wenn er dabei auf
weitere case-Zeilen stößt werden diese ignoriert. Dies bedeutet auch das er
nicht automatisch beim nächsten case
stoppt.
<?php
$var = 4;
switch ($var) {
case 0:
echo "Ich werde nicht ausgeführt";
case 4:
echo "Ich schon";
case 90:
echo "Ich jedoch auch";
}
?>
Wenn dieses Verhalten nicht erwünscht ist kann man eine break
Anweisung hinzufügen. Dies beendet dann den case-Teil und springt somit
zum Ende der Switch-Abfrage.
<?php
$var = 4;
switch ($var) {
case 0:
echo "Ich werde nicht ausgeführt";
break;
case 4:
echo "Ich schon";
break;
case 90:
echo "Ich nicht mehr";
break; // theoretisch überflüssig, man ist eh schon am ende
}
?>
Falls eine switch-Abfrage keinen passendes case
findet wird
der default:
-Teil angesprungen, falls vorhanden.
<?php
switch ($formaction) {
case 'löschen':
echo "Irgendwas wird nun gelöscht";
break;
case 'speichern':
echo "Irgendwas wird nun gespeichert";
break;
default:
echo "Zeige etwas an, oder mache etwas, falls kein case-teil trifft";
break;
case 'neuladen': // kann gefunden werden und wird nicht automatisch durch default abgefangen
echo "Etwas wird neu geladen";
break;
}
?>
Obwohl es möglich ist ein solchen default:
-Teil überall einzufügen
sollte er jedoch wegen der Übersicht nur am Ende der Switch-Abfrage eingefügt werden. Dies vereinfacht
das Lesen des PHP-Skripte. Zuerst prüft man die konkreten Werte und dann
gibt es zum Schluss ein default-Teil der als letzte Möglichkeit ausgeführt wird
(vergleichbar mit einem else
bei Verkettetten if
-else
if
-else if
-...-else
Abfragen).