switch
Die switch-Anweisung ist gleichbedeutend einer
Reihe von if-Anweisungen mit dem gleichen Parameter.
Häufig wollen Sie ein und dieselbe 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 zwei Beispiele zeigen zwei verschiedene Wege, das Gleiche
zu bewirken; eines gebraucht mehrere if-Anweisungen,
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 Anweisungen von PHP 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.
Zum Beispiel:
Wenn hier $i gleich 0 ist, würde PHP alle print-Anweisungen
ausführen! Ist $i gleich 1, werden die letzten beiden
print-Befehle ausgeführt und wenn $i = 2 ist, wird nur der
letzte print-Befehl ausgeführt. Deshalb ist es wichtig
break-Anweisungen zu setzen (abgesehen von
bestimmten Fällen, in denen Sie diese mit Absicht weglassen).
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.
Ist ihre Bedingung komplizierter als ein einfacher Vergleich
und/oder in einer umfangreichen Schleife eingebettet, kann
eine switch-Anweisung schneller als
mehrere if-Befehle sein.
Der Anweisungsteil von case kann auch leer sein. Dann wird
die Kontrolle einfach an den nächsten case-Teil übergeben.
Ein Spezialfall ist default. Dieser Fall trifft
auf alles zu, was nicht von den voranstehenden case-Ausdrücken
erfasst wurde und sollte als letzte case Anweisung
angegeben werden. Zum Beispiel:
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 wurden in einfache Typen umgewandelt.
Die alternative Syntax der Kontrollstrukturen gilt auch für
switch-Sequenzen. Mehr Informationen dazu erhalten Sie unter Alternative Syntax
für Kontroll-Strukturen.