W3docs

declare

Das Schlüsselwort declare setzt Ausführungsdirektiven in PHP: strict_types, encoding und ticks – mit Beispielen und Hinweisen zu Fallstricken.

Das PHP-Schlüsselwort declare

declare ist eine PHP-Kontrollstruktur, die eine Ausführungsdirektive für den betreffenden Code setzt. Anders als die meisten Anweisungen führt eine Direktive keine Logik aus – sie verändert, wie die Engine den umgebenden Code interpretiert. PHP unterstützt genau drei Direktiven: strict_types (erzwingt Typdeklarationen), encoding (legt die Zeichenkodierung des Skripts fest) und ticks (ein Legacy-Event-Hook, der in PHP 8.0 entfernt wurde).

Der häufigste Grund, declare heute zu verwenden, ist eine einzige Zeile am Anfang einer Datei: declare(strict_types=1);. Diese Seite behandelt die Syntax, jede Direktive und die häufigen Fallstricke.

Syntax

Es gibt zwei Formen. Die Anweisungsform wendet die Direktive auf den Rest der Datei an:

declare(directive);

Die Blockform wendet die Direktive nur auf den Code innerhalb der geschweiften Klammern an:

declare(directive) {
    // code block
}

Die Blockform ist nur für ticks gültig. strict_types und encoding müssen die Anweisungsform verwenden und müssen die allererste Anweisung in der Datei sein (nur <?php darf ihnen vorangehen). Die Blockform mit strict_types zu verwenden ist ein fataler Fehler.

strict_types: Typdeklarationen erzwingen

Standardmäßig konvertiert PHP skalare Argumente, um sie an die Typdeklarationen einer Funktion anzupassen. Mit declare(strict_types=1); tut es das nicht – die Übergabe des falschen Typs wirft einen TypeError. Das ist die Direktive, die im täglichen Gebrauch tatsächlich zum Einsatz kommt.

php— editable, runs on the server

Zwei Regeln, die man sich merken sollte:

  • Sie muss die erste Anweisung in der Datei sein. Alles davor – selbst Leerzeichen oder eine andere Anweisung – ist ein fataler Fehler.
  • Sie gilt pro Datei. Der Strict-Modus gilt für Aufrufe, die aus dieser Datei stammen, basierend darauf, wo der Aufruf steht – nicht dort, wo die Funktion definiert ist. Eine Bibliotheksfunktion, die aus einer Strict-Datei aufgerufen wird, wird streng geprüft; dieselbe Funktion aus einer Nicht-Strict-Datei nicht.

Ohne die Direktive würde add(2, "3") stillschweigend "3" zu 3 konvertieren und 5 zurückgeben – genau das ist die Art versteckter Fehler, die strict_types sichtbar machen soll.

encoding: Zeichensatz des Skripts deklarieren

declare(encoding='ISO-8859-1');

Dies teilt der Engine mit, wie die Bytes der Skriptdatei zu interpretieren sind. Auf modernen Systemen, die überall UTF-8 verwenden, wird das selten benötigt, kann aber bei Legacy-Dateien oder bestimmten Serverkonfigurationen relevant sein. Es hat nur dann eine Wirkung, wenn PHP mit Multibyte-Unterstützung kompiliert wurde.

ticks: ein Legacy-Event-Hook

Ein Tick ist ein Ereignis, das alle N low-level-Anweisungen ausgelöst wird, die innerhalb des declare-Blocks ausgeführt werden. Er wurde verwendet, um einfache Callbacks (Signal-Handling, Profiling) in ansonsten synchronen Code einzuhängen. Dies ist die einzige Direktive, bei der die Blockform sinnvoll ist:

declare(ticks=1) {
    function tick_handler() {
        echo "tick" . PHP_EOL;
    }
    register_tick_function('tick_handler');

    $a = 1;
    $a += 2;
}

Die genaue Anzahl der Ticks hängt davon ab, wie viele Anweisungen ausgeführt werden. Die ticks-Direktive wurde in PHP 8.0 entfernt – verwenden Sie sie nicht in neuem Code; moderne Alternativen sind z. B. pcntl_signal für das Signal-Handling.

Wann welche Direktive verwenden

  • strict_types=1 – am Anfang jeder neuen Datei einfügen. Es ist der mit Abstand wertvollste Einsatz von declare und eine nahezu universelle Konvention in modernem PHP. Unter PHP Data Types und PHP Functions erfahren Sie, wie Typdeklarationen funktionieren.
  • encoding – nur dann, wenn tatsächlich eine Nicht-UTF-8-Quelldatei vorliegt und Multibyte-Unterstützung kompiliert ist.
  • ticks – nicht verwenden; ab PHP 8.0 entfernt.

Fazit

declare setzt Ausführungsdirektiven für ein Skript. In der Praxis bedeutet das eine einzige Zeile – declare(strict_types=1); –, die stille Typkonvertierung in explizite Fehler verwandelt und Funktionssignaturen aussagekräftig macht. Die Direktiven encoding und ticks sind speziell bzw. veraltet, aber das Kennen aller drei bewahrt davor, von der Syntax (Anweisungsform vs. Blockform) überrascht zu werden.

Übungen

Übung
Welche Aussagen über das PHP-Schlüsselwort declare sind wahr?
Welche Aussagen über das PHP-Schlüsselwort declare sind wahr?
Was this page helpful?