declare
(PHP 4, PHP 5, PHP 7, PHP 8)
Das declare
-Konstrukt wird verwendet, um
Ausführungsdirektiven für einen Codeblock festzulegen. Die Syntax von
declare
ist ähnlich wie die Syntax anderer
Ablauf-Kontrollstrukturen:
declare (directive) statement
Die directive
-Sektion erlaubt es, das Verhalten des
declare
-Blocks anzugeben.
Aktuell werden nur drei Direktiven unterstützt: die
ticks
-Direktive (siehe unten für weitere Informationen über
die ticks-Direktive),
die encoding
-Direktive (siehe unten für weitere
Informationen über die encoding-Direktive),
und die strict_types
-Direktive (siehe den Abschnitt über
strict typing
auf der Seite über Typendeklarationen).
Da Direktiven behandelt werden, wenn die Datei kompiliert wird, dürfen nur Literale als Direktiven-Werte angegeben werden. Variable und Konstante können nicht verwendet werden. Zur Veranschaulichung:
<?php
// Dies ist erlaubt:
declare(ticks=1);
// Dies ist ungültig:
const TICK_VALUE = 1;
declare(ticks=TICK_VALUE);
?>
Der statement
-Teil des declare
-Blocks
wird ausgeführt - wie genau die Ausführung aussieht und welche Seiteneffekte
während der Ausführung auftreten können, ist abhängig von der im
directive
-Block gesetzten Direktive.
Das declare
-Konstrukt kann außerdem im globalen
Sichtbarkeitsbereich verwendet werden, es hat dann Auswirkungen auf den
gesamten folgenden Code (wird die Datei mit der
declare
-Anweisung inkludiert, hat die Anweisung jedoch
keine Auswirkung auf das einbindende File).
<?php
// dies sind gleichwertige Schreibweisen:
// Sie können diese Schreibweise verwenden:
declare(ticks=1) {
// hier das vollständige Skript einfügen
}
// oder diese:
declare(ticks=1);
// hier das vollständige Skript einfügen
?>
Ticks
Ein Tick ist ein Event, das für alle N Low-Level-Statements
auftritt, die vom Parser innerhalb des declare
-Blocks
ausgeführt werden.
Der Wert für N wird durch die Verwendung von
ticks=N
innerhalb der
directive
-Sektion des declare
-Blocks
angegeben.
Nicht alle Statements führen zu einem Tick-Event. So etwa Konditionen und Argumente.
Das/die bei jedem Tick auftretenden Event(s) werden durch die Verwendung der Funktion register_tick_function() angegeben. Betrachten Sie das folgende Beispiel für mehr Details. Beachten Sie, dass mehr als ein Event bei jedem Tick auftreten kann.
Beispiel #1 Tick Nutzungsbeispiel
<?php
declare(ticks=1);
// Funktion, welche bei jeden Tick-Event aufgerufen wird
function tick_handler()
{
echo "tick_handler() aufgerufen\n";
}
register_tick_function('tick_handler'); // löst ein Tick-Ereignis aus
$a = 1; // löst ein Tick-Ereignis aus
if ($a > 0) {
$a += 2; // löst ein Tick-Ereignis aus
print($a); // löst ein Tick-Ereignis aus
}
?>
Siehe auch register_tick_function() und unregister_tick_function().
Encoding
Das Encoding eines Skripts kann pro Skript mittels der encoding
-Direktive
festgelegt werden.
Beispiel #2 Das Encoding eines Skripts deklarieren.
<?php
declare(encoding='ISO-8859-1');
// hier folgt der Code
?>
Die einzig zulässige Syntax für ein declare, das mit Namespaces kombiniert
wird, ist declare(encoding='...');
, wobei
...
der Name des Encodings ist.
declare(encoding='...') {}
führt zu einem Parse-Error,
wenn es mit Namespaces kombiniert wird.
Siehe auch zend.script_encoding.