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 wie break verhält. Wenn Sie ein switch innerhalb einer Schleife verwenden und mit dem nächsten Schleifendurchlauf beginnen wollen so müssen Sie in diesem Fall continue 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;
}
?>
Deutsche Übersetzung
Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.
Vielen Dank im Voraus.
Dokument erstellt 30/01/2003, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/php-rf-control-structures.switch.html
Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.
Referenzen
Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.