switch
(PHP 4, PHP 5, PHP 7)
Die switch
Anweisung entspricht in etwa einer
Folge von if
Anweisungen die jeweils den gleichen
Ausdruck prüfen. Es kommt oft vor, dass man dieselbe Variable (oder
denselben Ausdruck) gegen viele verschiedene mögliche Werte prüfen
und abhängig davon unterschiedlichen Code ausführen möchte. Genau
hierfür wurde die switch
Anweisung eingeführt.
Hinweis: Beachten Sie, dass im Unterschied zu einigen anderen Sprachen die continue Anweisung auch auf
switch
anwendbar ist und sich ähnlich wiebreak
verhält. Wenn Sie einswitch
innerhalb einer Schleife verwenden und mit dem nächsten Schleifendurchlauf beginnen wollen so müssen Sie in diesem Fallcontinue 2
angeben.
Hinweis:
Beachten Sie auch, dass switch/case typschwache Vergleiche durchführt.
Version | Beschreibung |
---|---|
7.0.0 |
Mehrere default case Anweisungen erzeugen einen
E_COMPILE_ERROR Fehler.
|
Die folgenden beiden Beispiele zeigen zwei verschiedene Wege
um das gleiche Verhalten zu erreichen. Eines benutzt eine
Folge von if
und elseif
Anweisungen, das andere eine switch
Anweisung:
Beispiel #1 switch
Anweisung
<?php
if ($i == 0) {
echo "i ist gleich 0";
} elseif ($i == 1) {
echo "i ist gleich 1";
} elseif ($i == 2) {
echo "i ist gleich 2";
}
switch ($i) {
case 0:
echo "i ist gleich 0";
break;
case 1:
echo "i ist gleich 1";
break;
case 2:
echo "i ist gleich 2";
break;
}
?>
Beispiel #2 switch
gestattet die Verwendung von Strings
<?php
switch ($i) {
case "Apfel":
echo "i ist Apfel";
break;
case "Balken":
echo "i ist Balken";
break;
case "Kuchen":
echo "i ist Kuchen";
break;
}
?>
Um Fehler zu vermeiden ist es wichtig zu verstehen wie eine
switch
Anweisung ausgeführt wird. Eine
switch
Anweisung wird zeilenweise (genauer:
Anweisung für Anweisung) ausgewertet. Zunächst einmal wird
überhaupt kein Code ausgeführt. Erst wenn eine case
Anweisung gefunden wird, deren Ausdruck zu einem Wert evaluiert, der dem an switch
übergebenen Ausdruck entspricht, beginnt PHP tatsächlich die folgenden
Anweisungen auszuführen. Die Ausführung wird fortgesetzt bis das Ende
der switch
Anweisung erreicht ist oder bis PHP
bei der Ausführung auf eine break
Anweisung stößt.
Wenn Sie am Ende der Anweisungsliste eines case kein break
setzen, so wird die Ausführung mit dem nächsten
case fortgesetzt, z.B.:
<?php
switch ($i) {
case 0:
echo "i ist gleich 0";
case 1:
echo "i ist gleich 1";
case 2:
echo "i ist gleich 2";
}
?>
Wenn in diesem Beispiel $i gleich 0 ist, führt PHP alle
echo Anweisungen aus! Ist $i gleich 1, führt PHP die
letzten beiden echo Anweisungen aus. Sie erreichen das erwartete Verhalten
nur, wenn $i gleich 2 ist. Daher ist es wichtig
break
Anweisungen nicht zu vergessen (auch wenn Sie
gelegentlich absichtlich darauf verzichten werden, diese unter bestimmten
Bedingungen anzugeben).
In einer switch
Anweisung wird die Bedingung nur einmal
ausgewertet und das Ergebnis mit jeder case
Anweisung
verglichen. In einer elseif
Anweisung wird die Bedingung
erneut ausgewertet. Wenn Ihre Bedingung komplizierter ist als ein einfacher
Vergleich, und/oder sich in einer dichten Schleife befindet, kann ein
switch
schneller sein.
Die Anweisungsliste eines case kann ebenso leer sein, was einfach die Kontrolle an die Anweisungsliste des nächsten case übergibt.
<?php
switch ($i) {
case 0:
case 1:
case 2:
echo "i ist kleiner als 3, aber nicht negativ";
break;
case 3:
echo "i ist 3";
}
?>
Ein Sonderfall ist die default
Klausel. Diese fängt alles
ab, was nicht durch eine der anderen case Klauseln behandelt wurde. Zum
Beispiel:
<?php
switch ($i) {
case 0:
echo "i ist gleich 0";
break;
case 1:
echo "i ist gleich 1";
break;
case 2:
echo "i ist gleich 2";
break;
default:
echo "i ist nicht gleich 0, 1 oder 2";
}
?>
Die alternative Syntax für Kontrollstrukturen wird für switch Anweisungen unterstützt. Weitere Information entnehmen Sie Alternative Syntax für Kontrollstrukturen.
<?php
switch ($i):
case 0:
echo "i ist gleich 0";
break;
case 1:
echo "i ist gleich 1";
break;
case 2:
echo "i ist gleich 2";
break;
default:
echo "i ist nicht gleich 0, 1 oder 2";
endswitch;
?>
Es ist möglich ein Semikolon anstelle eines Doppelpunkts nach einem case zu verwenden, wie:
<?php
switch($beer)
{
case 'Bitburger';
case 'Erdinger';
case 'Jever';
echo 'Gute Wahl';
break;
default;
echo 'Bitte treffen Sie eine andere Wahl...';
break;
}
?>