W3docs

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_types und encoding müssen die allererste Anweisung in einer Datei sein und die Anweisungsform declare(strict_types=1); verwenden — sie haben keinen Block und verwenden daher niemals enddeclare.
  • ticks ist die einzige Direktive, deren Wirkung natürlicherweise auf einen Block von Anweisungen beschränkt ist, weshalb sie mit der alternativen Syntax und enddeclare kombiniert 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 und enddeclare) nicht gültig ist — enddeclare gehö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: 3

Der 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 enddeclare

strict_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.

Übungen

Übung
Was ist die korrekte Methode, um die declare-Anweisung in PHP zu beenden?
Was ist die korrekte Methode, um die declare-Anweisung in PHP zu beenden?
Was this page helpful?