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

  1. switch ($methode) wertet $methode einmal aus und vergleicht das Ergebnis per lockerem Vergleich (==) mit jedem case-Wert.
  2. case "GET" passt nicht zu "POST", daher springt die Ausführung zum nächsten Case.
  3. case "POST" passt. Weil nach diesem Label kein break folgt, läuft die Ausführung in den Block von case "PUT" weiter. So teilen sich beide Methoden denselben Zweig.
  4. break beendet den Switch nach der Ausgabe. Ohne break würde die Ausführung in default weiterlaufen.
  5. default ist 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

switchmatch (PHP 8+)
Anweisung, gibt keinen Wert zurückAusdruck, gibt einen Wert zurück
Lockerer Vergleich (==)Strikter Vergleich (===)
Fall-through standardmäßig aktivKein Fall-through, jeder Arm liefert ein Ergebnis
Unterstützt mehrzeilige Blöcke pro CasePro 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.