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 Klammern —
switch (...) { ... } - Alternative (Doppelpunkt-)Syntax —
switch (...): ... 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
switchund PHPswitch— die Anweisung, dieendswitchschließtbreak— beendet einencase, damit die Ausführung nicht durchfälltendif,endfor,endforeach— die entsprechenden alternativen Syntax-Schließer für andere Kontrollstrukturen