declare
Das Sprachkonstrukt declare wird dazu verwendet, um Ausführungsdirektiven für einen Codeblock anzugeben. Die Schreibweise von declare ist der anderer Kontrollstrukturen ähnlich:
declare (Direktive) Anweisung
Die Direktive gibt Ihnen die Möglichkeit, das Verhalten des declare-Blocks zu bestimmen. Zur Zeit wird nur eine Direktive unterstützt: die ticks (Weiter unten finden Sie mehr Informationen zu den ticks).
Der Anweisungsteil des declare-Blocks wird ausgeführt - wie genau diese Ausführung passiert und welche Nebeneffekte während der Ausführung auftreten, hängt von der Direktive ab, die Sie im directive-Block angegeben haben.
Das declare Konstrukt kann auch im globalen Geltungsbereich benutzt werden und gilt dann für den folgenden Code.
<?php
// bewirkt das Gleiche:
// sie können declare so benutzen:
declare(ticks=1) {
// hier folgt Ihr ganzes Skript
}
// oder wie hier:
declare(ticks=1);
// hier folgt Ihr ganzes Skript
?>
Ticks
Ein tick ist ein Ereigniss, das bei jedem N-ten Autreten der low-level Anweisungen innerhalb des declare Blocks, die vom Parser ausgeführt werden, auftritt. Der Wert von N wird durch die Angabe von ticks=N innerhalb des declare-Blocks in dem directive Abschnitt bestimmt.
Das Ereignis/die Ereignisse, die bei jedem tick eintreten, legen Sie mit der Funktion register_tick_function() fest. Weitere Einzelheiten können Sie dem Beispiel unten entnehmen. Beachten Sie, dass mehr als ein Ereigniss für jeden tick eintreten kann.
Example#1 Profil eines Bereichs von PHP Code
<?php
// Funktion, die bei Aufruf die Zeit aufzeichnet
function profile($dump = FALSE)
{
static $profile;
// Rückgabe der gespeicherten Zeit aus profile, danach löschen
if ($dump) {
$temp = $profile;
unset ($profile);
return ($temp);
}
$profile[] = microtime ();
}
// Einen tick handler bestimmen
register_tick_function("profile");
// Funktion vor dem declare-Block initialisieren
profile();
// Ausführen eines Code-Blocks, jede 2te Anweisung löst einen tick aus
declare(ticks=2) {
for ($x = 1; $x < 50; ++$x) {
echo similar_text(md5($x), md5($x*$x)), "<br />;";
}
}
// Ausgabe der gespeicherten Daten aus dem Profiler
print_r(profile (TRUE));
?>
Ticks sind gut für Debugging, einfaches Multitasking, Hintergrund I/O und viele andere Aufgaben geeignet.
Siehe auch register_tick_function() und unregister_tick_function().