Die switch-Anweisung ist gleichbedeutend einer
Reihe von if-Anweisungen mit dem gleichen Parameter.
Häufig wollen Sie ein und die selbe Variable (bzw. den selben Ausdruck)
mit verschiedensten Werten vergleichen und in Abhängigkeit vom
Auswertungsergebnis verschiedene Programmteile ausführen. Genau
das ermöglicht die switch-Anweisung.
Die folgenden 2 Beispiele zeigen 2 verschiedene Wege, das gleiche
zu bewirken; eins gebraucht mehrere if-Befehle,
das andere eine switch-Anweisung:
Es ist wichtig, die Ausführung einer
switch-Anweisung zu verstehen, um Fehler zu
vermeiden. Die switch-Anweisung wird Zeile für
Zeile (also Anweisung für Anweisung) abgearbeitet. Zu Beginn wird
nichts ausgeführt. Erst wenn bei einem case-Teil
eine Entsprechung zum switch-Ausdruck vorliegt,
werden die darin enthaltenen Befehle ausgeführt. PHP fährt dann
mit der Abarbeitung des restlichen Codes innerhalb des
switch-Blocks fort (oder bis zum ersten
Auftreten einer break-Anweisung). Ohne
break am Ende eines case-Teils werden also
noch die folgenden case-Blöcke ausgeführt.
Z.B.:
Wenn hier $i gleich 0 ist, würde PHP alle print-Anweisungen
ausführen. Ist $i gleich 1, würden die letzten beiden
print-Befehle ausgeführt und wenn $i = 2 ist, würde nur der
letzte print-Befehl ausgeführt. Deshalb ist es wichtig, bei
der ersten gefundenen Übereinstimmung eine
break-Anweisung zu setzen (abgesehen von
bestimmten Fällen, wo genau dieses Verhalten gefordert wird).
Bei einer switch-Anweisung wird die
Bedingung also nur einmal überprüft und das Ergebnis mit jeder
case-Anweisung verglichen. Bei einem
elseif-Befehl wird die Bedingung neu geprüft.
Eine switch-Anweisung kann schneller als
mehrere if-Befehle sein, z.B. bei
komplizierteren Bedingungen als einem einfachen Vergleich.
Der Anweisungsteil von case kann auch leer sein. Dann wird
die Kontrolle einfach an den nächsten case-Teil übergeben.
Ein Spezialfall ist die Anweisung default. Diese trifft
auf alles zu, was nicht von den voranstehenden case-Ausdrücken
erfasst wurde, wie z.B.:
Der case-Ausdruck kann eine Prüfung einfacher
Typen sein, also von Integer- oder Fließkomma-Zahlen oder von
Strings / Zeichenketten. Arrays oder Objekte können nicht benutzt
werden, es sei denn, sie werden auf einfache Typen herunter
gebrochen.
Die alternative Syntax gilt auch für switch-Sequenzen. Mehr
Informationen dazu unter Alternative Syntax
für Kontroll-Strukturen .