W3docs

endswitch

endswitch schließt eine switch-Anweisung in der alternativen PHP-Syntax. Erfahren Sie, wann es erforderlich ist und wie es eingesetzt wird.

Einführung

endswitch schließt eine switch-Anweisung, die in PHPs alternativer Syntax geschrieben ist — also der Form, die die öffnende geschweifte Klammer { durch einen Doppelpunkt : und die schließende geschweifte Klammer } durch das Schlüsselwort endswitch; ersetzt. Es ist kein eigenständiges Sprachfeature, sondern das schließende Trennzeichen einer bestimmten Schreibweise von switch.

PHP bietet zwei gleichwertige Möglichkeiten, Blockanweisungen wie switch, if, for, foreach und while zu schreiben:

  • Syntax mit geschweiften Klammernswitch (...) { ... }
  • Alternative (Doppelpunkt-)Syntaxswitch (...): ... endswitch;

Diese Seite erklärt, wann endswitch erforderlich ist, warum die alternative Syntax existiert und welche häufige Falle es zu beachten gilt.

Syntax: Geschweifte Klammern vs. endswitch

Die beiden folgenden Codeausschnitte machen exakt dasselbe. Der einzige Unterschied liegt darin, wie der Block geöffnet und geschlossen wird.

<?php
// Curly-brace syntax — no endswitch
switch ($n) {
  case 1:
    echo "one";
    break;
  default:
    echo "other";
}
<?php
// Alternative syntax — colon opens, endswitch closes
switch ($n):
  case 1:
    echo "one";
    break;
  default:
    echo "other";
endswitch;

endswitch ist obligatorisch bei der Doppelpunkt-Form und ungültig bei der Klammer-Form — man wählt pro switch einen Stil und bleibt dabei. Das Mischen beider Stile (ein : als Öffner mit einem } als Schließer oder umgekehrt) führt zu einem Parse-Fehler.

Beispiel

Hier ist ein vollständiges, ausführbares Beispiel mit der alternativen Syntax:

<?php

$dayOfWeek = 2;
switch ($dayOfWeek):
  case 1:
    echo "Today is Monday";
    break;
  case 2:
    echo "Today is Tuesday";
    break;
  case 3:
    echo "Today is Wednesday";
    break;
  case 4:
    echo "Today is Thursday";
    break;
  case 5:
    echo "Today is Friday";
    break;
  default:
    echo "It is the weekend!";
endswitch;

Da $dayOfWeek den Wert 2 hat, wird der case 2:-Zweig ausgeführt und gibt Today is Tuesday aus. Das break am Ende jedes Zweigs beendet die switch-Anweisung, sodass die nachfolgenden Cases nicht ausgeführt werden. default: behandelt jeden Wert, der keinem case entspricht. Die Zeile endswitch; schließt die Struktur; die Ausführung wird mit dem fortgesetzt, was danach folgt.

Warum die alternative Syntax verwenden?

Die Doppelpunkt-Form existiert hauptsächlich für Templates, die PHP und HTML verschachteln. Wenn der Rumpf einer Kontrollstruktur viele Zeilen Markup umfasst, ist eine verirrte } leicht fehlplatziert und schwer zuzuordnen. Das benannte Schlüsselwort endswitch macht den Schlusspunkt offensichtlich — man sieht auf einen Blick, dass es zu switch gehört, genauso wie </div> zu <div> gehört.

Dieses Muster ist in reinen PHP-Templates (und in Frameworks, die zu solchen kompilieren) weit verbreitet:

<?php switch ($status): ?>
  <?php case 'active': ?>
    <p>Your account is active.</p>
    <?php break; ?>
  <?php case 'pending': ?>
    <p>Your account is awaiting approval.</p>
    <?php break; ?>
  <?php default: ?>
    <p>Account status unknown.</p>
<?php endswitch; ?>

Hier geben die Cases HTML direkt aus, anstatt echo zu verwenden. Die alternative Syntax hält jeden <?php ?>-Tag kurz und macht das schließende endswitch selbsterklärend. Mit geschweiften Klammern wäre der Schließer ein einzelnes <?php } ?> — weit weniger lesbar inmitten von umfangreichem Markup.

Häufige Falle: keine Ausgabe vor dem ersten case

Bei der alternativen switch-Syntax darf zwischen der Zeile switch(...): und dem ersten case kein HTML oder Leerzeichen ausgegeben werden. In einem Template wird dort platzierter Text bedingungslos an den Browser gesendet, und PHP gibt eine Warnung aus — daher sollte das öffnende Tag direkt vor dem ersten <?php case ...: ?> stehen.

Verwandte Referenzen

  • switch und PHP switch — die Anweisung, die endswitch schließt
  • break — beendet einen case, damit die Ausführung nicht durchfällt
  • endif, endfor, endforeach — die entsprechenden alternativen Syntax-Schließer für andere Kontrollstrukturen

Übungen

Übung
Was signalisiert die 'endswitch'-Anweisung in PHP?
Was signalisiert die 'endswitch'-Anweisung in PHP?
Was this page helpful?