PHP switch statement mit cases und default-Block
Ein PHP switch statement vergleicht einen Ausdruck mit einer Liste von case-Werten und führt den ersten passenden Zweig aus. Nutze es, wenn eine Variable einen von mehreren festen Werten enthält und jeder Wert andere Logik auslösen soll. Mehrere Case-Labels in einem gemeinsamen Zweig halten wiederholte Bedingungen aus langen if/elseif-Ketten heraus.
PHP Switch Statement Beispiel Für Werteabgleich
Ausgabe:
Die Ausgabe erscheint hier...
Ausgabe:
Ressource schreiben
So Funktioniert Dieses Beispiel
switch ($methode)wertet$methodeeinmal aus und vergleicht das Ergebnis per lockerem Vergleich (==) mit jedemcase-Wert.case "GET"passt nicht zu"POST", daher springt die Ausführung zum nächsten Case.case "POST"passt. Weil nach diesem Label keinbreakfolgt, läuft die Ausführung in den Block voncase "PUT"weiter. So teilen sich beide Methoden denselben Zweig.breakbeendet den Switch nach der Ausgabe. Ohnebreakwürde die Ausführung indefaultweiterlaufen.defaultist der Auffangzweig, wenn kein Case passt. Er ist optional, aber für defensiven Code sinnvoll.
Verwendet PHP switch Strikten Oder Lockeren Vergleich?
PHP switch nutzt lockeren Vergleich (==), daher können Werte beim Abgleich konvertiert werden. Ein häufiger Stolperstein ist, dass "0" auf case 0 passt und false ebenfalls case 0 trifft. Die Reihenfolge der Cases ist entscheidend: Der erste locker gleiche Treffer gewinnt. Wenn strikter Vergleich wichtig ist, nutze match (PHP 8+) oder explizite if/elseif-Prüfungen mit ===.
Häufige Fehler Bei PHP switch
Fehlendes break (unbeabsichtigter Fall-through):
Falsch:
$rolle = "administrator";
switch ($rolle) {
case "administrator":
$label = "administrator";
case "redakteur":
$label = "redakteur";
break;
}
Richtig:
$rolle = "administrator";
switch ($rolle) {
case "administrator":
$label = "administrator";
break;
case "redakteur":
$label = "redakteur";
break;
}
Ohne break läuft ein getroffener Case in die folgenden Zweige weiter. Gewollter Fall-through sollte Labels ohne Code dazwischen gruppieren.
continue in einer Schleife verwenden und die nächste Iteration erwarten:
Falsch:
$elemente = ["behalten", "überspringen", "behalten"];
foreach ($elemente as $element) {
switch ($element) {
case "überspringen":
continue; // beendet den switch, nicht die Schleife
}
echo $element . "\\n";
}
Richtig:
$elemente = ["behalten", "überspringen", "behalten"];
foreach ($elemente as $element) {
switch ($element) {
case "überspringen":
continue 2; // springt zur nächsten foreach-Iteration
}
echo $element . "\\n";
}
In einem switch, der in einer Schleife verschachtelt ist, verhält sich continue wie break für den Switch. Nutze continue 2, um gezielt die äußere Schleife fortzusetzen.
PHP Switch vs Match-Ausdruck
| switch | match (PHP 8+) |
|---|---|
| Anweisung, gibt keinen Wert zurück | Ausdruck, gibt einen Wert zurück |
Lockerer Vergleich (==) | Strikter Vergleich (===) |
| Fall-through standardmäßig aktiv | Kein Fall-through, jeder Arm liefert ein Ergebnis |
| Unterstützt mehrzeilige Blöcke pro Case | Pro Arm genau ein Ausdruck |
Nutze switch, wenn Zweige mehrere Anweisungen enthalten oder absichtlicher Fall-through Cases gruppiert. Nutze match, wenn du einen Wert mit strikter Typsicherheit auf ein Ergebnis abbilden willst.
FAQ
Warum braucht man break in einem PHP switch statement?
Ein PHP switch nutzt standardmäßig Fall-through: Nach einem Treffer laufen alle folgenden Zweige weiter, bis break oder das Ende des Switch-Blocks erreicht ist. break verlässt den Switch sofort. Weglassen ist nur dann sicher, wenn du bewusst Cases mit derselben Logik gruppierst.
Wann sollte ich in PHP 8+ match statt switch verwenden?
Nutze match, wenn du strikten Vergleich brauchst, das Ergebnis direkt einer Variable zuweisen willst oder pro Zweig genau einen Ausdruck hast. Bleibe bei switch, wenn Zweige mehrere Anweisungen, Seiteneffekte oder absichtlichen Fall-through enthalten.