enddeclare
Lernen Sie, wie PHP enddeclare einen declare()-Block in der alternativen Doppelpunkt-Syntax schließt, mit Ticks-Beispielen und häufigen Fehlern.
Einführung
enddeclare ist das schließende Schlüsselwort für einen declare()-Block, der in PHP's alternativer Syntax geschrieben ist — der doppelpunktbasierten Form, die PHP als Ersatz für geschweifte Klammern anbietet. So wie if: durch endif und foreach: durch endforeach geschlossen wird, wird declare(...): durch enddeclare; geschlossen.
Diese Seite erläutert, was das Schlüsselwort tatsächlich bewirkt, die eine Direktive, mit der es in der Praxis verwendet wird (ticks), die genaue Syntax, die PHP akzeptiert, und die Fehler, die zu einem Parse-Fehler führen.
Wann Sie enddeclare tatsächlich benötigen
Eine declare()-Direktive legt ein Ausführungsverhalten für einen Codebereich fest. Sie hat drei Direktiven: ticks, strict_types und encoding. Davon gilt:
strict_typesundencodingmüssen die allererste Anweisung in einer Datei sein und die Anweisungsformdeclare(strict_types=1);verwenden — sie haben keinen Block und verwenden daher niemalsenddeclare.ticksist die einzige Direktive, deren Wirkung natürlicherweise auf einen Block von Anweisungen beschränkt ist, weshalb sie mit der alternativen Syntax undenddeclarekombiniert wird.
In der Praxis bedeutet das: Sie greifen auf enddeclare zurück, wenn Sie einen ticks-Block möchten und die Doppelpunkt-Syntax den geschweiften Klammern vorziehen. Das ist in modernem Code selten, weshalb es sich lohnt, die Syntax genau zu kennen.
Syntax
Die alternative Form ersetzt die öffnende { durch einen Doppelpunkt und die schließende } durch enddeclare;:
declare(directive=value):
// statements
enddeclare;Die äquivalente Form mit geschweiften Klammern lautet:
declare(directive=value) {
// statements
}Die beiden Formen sind austauschbar. Beachten Sie, dass
declare(...) { ... } enddeclare;(geschweifte Klammern undenddeclare) nicht gültig ist —enddeclaregehört ausschließlich zur Doppelpunkt-Form. Das Mischen beider Formen ist ein Syntaxfehler.
Beispiel: ein ticks-Block mit enddeclare geschlossen
Ein Tick ist ein Ereignis, das PHP alle N niedrigeberiger Anweisungen innerhalb eines declare(ticks=N)-Blocks ausgibt. Durch das Registrieren eines Handlers mit register_tick_function() können Sie bei jedem Tick Code ausführen — nützlich für leichtgewichtiges Profiling oder signalartige Hooks.
<?php
$ticks = 0;
register_tick_function(function () use (&$ticks) {
$ticks++;
});
declare(ticks=1):
$x = 1;
$y = 2;
$z = $x + $y;
enddeclare;
echo "Result: $z\n";
echo "Ticks fired: $ticks\n";Ausgabe:
Result: 3
Ticks fired: 3Der Handler wird einmal pro Anweisung innerhalb des Blocks ausgeführt (drei Zuweisungen → drei Ticks). Code außerhalb des declare(...): ... enddeclare;-Blocks löst keine Ticks aus.
Häufige Fehler
Geschweifte Klammern nicht mit enddeclare kombinieren
Dies ist der häufigste Fehler (und was ältere Tutorials falsch machen):
// ❌ Parse error: unexpected token "enddeclare"
declare(ticks=1) {
// ...
} enddeclare;Wählen Sie einen Stil — entweder { ... } oder : ... enddeclare;.
enddeclare nicht mit strict_types oder encoding verwenden
declare(strict_types=1) und declare(encoding='UTF-8') sind Direktiven auf Dateiebene, die keinen Block enthalten, sodass enddeclare nichts zu schließen hat:
<?php
declare(strict_types=1); // statement form — no block, no enddeclarestrict_types muss die erste Anweisung in der Datei sein; das Platzieren nach einer Ausgabe oder nach Code ist ein fataler Fehler.
Jedes declare(...): mit genau einem enddeclare; abschließen
Wie alle Schlüsselwörter der alternativen Syntax muss ein geöffnetes declare(...): durch genau ein enddeclare; geschlossen werden. Wird es vergessen, bleibt der Block offen und PHP meldet den Fehler „unexpected end of file".
Fazit
enddeclare schließt einen declare(...):-Block, der in PHP's alternativer Syntax geschrieben ist. Die einzige Direktive, mit der Sie es realistischerweise verwenden würden, ist ticks, da strict_types und encoding Anweisungen auf Dateiebene ohne Block sind. Halten Sie den Doppelpunkt und enddeclare; zusammen und mischen Sie sie niemals mit geschweiften Klammern, dann verhält sich das Schlüsselwort vorhersehbar.
Für einen vollständigen Überblick über Ausführungsdirektiven siehe declare; für die doppelpunktbasierte alternative Syntax über Kontrollstrukturen hinweg siehe PHP Syntax.