Das declare-Konstrukt wird verwendet, um Ausführungsdirektiven für einen Codeblock festzulegen. Die Syntax von declare ist ähnliche wie die Syntax anderer Ablauf-Kontrollstrukturen:
declare (directive) statement
Die directive-Sektion erlaubt es, das Verhalten des declare-Blocks anzugeben. Aktuell werden zwei Direktiven unterstützt: die ticks-Direktive (siehe unten für weitere Informationen über die ticks-Direktive) und die encoding-Direktive (siehe unten für weitere Informationen über die encoding-Direktive).
Hinweis: Die Encoding-Direktive wurde in PHP 5.3.0 hinzugefügt.
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
?>
Mit PHP 5.3.0 gilt Ticks als veraltet und wird mit PHP 6.0.0 entfernt.
Ein Tick ist ein Event, das 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.
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 Eine PHP-Codesektion profilen
<?php
// Eine Funktion, die die Zeit aufzeichnet, zu der sie aufgerufen wurde
function profile($dump = FALSE)
{
static $profile;
// Gibt die im Profil gespeicherten Zeiten zurück und löscht sie danach
if ($dump) {
$temp = $profile;
unset($profile);
return $temp;
}
$profile[] = microtime();
}
// Einen Tick-Handler angeben
register_tick_function("profile");
// Die Funktion vor dem declare-Block initialisieren
profile();
// Einen Codeblock ausführen, bei jedem zweiten Statement einen Tick auslösen
declare(ticks=2) {
for ($x = 1; $x < 50; ++$x) {
echo similar_text(md5($x), md5($x*$x)), "<br />;";
}
}
// Die im Profiler gespeicherten Daten anzeigen
print_r(profile(TRUE));
?>
Ticks sind sehr geeignet für das Debugging, die Implementierung einfachen Multitaskings, I/O-Verarbeitung im Hintergrund und viele weitere Anwendungen.
Siehe auch register_tick_function() und unregister_tick_function().
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 encodete Wert ist. declare(encoding='...') {} bewirkt einen Parse-Error, wenn es mit Namespaces kombiniert wird.
Der encodete declare-Wert wird in PHP 5.3 ignoriert, sofern PHP nicht mit --enable-zend-multibyte kompiliert wurde. In PHP 6.0.0 wird die encoding-Direktive verwendet, um den Scanner darüber zu informieren, mit welchem Encoding die Datei erstellt wurde. Zulässige Werte sind Encodingbezeichnungen wie UTF-8.