declare
A declare egy kódblokk számára
adott futtatási direktívák beállítását teszi lehetővé.
A declare szintaxisa hasonló a
vezérlési szerkezetekéhez:
A direktíva rész a
declare blokk működését szabályozza.
Jelenleg csak egy direktíva használható, a
ticks. (Lásd lejjebb a
ticks
részleteit)
A declare blokk utasítás
része mindig egyszer fut le. Az, hogy miképp, és milyen
mellékhatásokkal, a direktíva részben
megadottaktól függ.
Tick-ek
A tick egy olyan esemény, amely minden
N db alacsony szintű utasítás
végrehajtásakor bekövetkezik a declare
blokkban. Az N értéket a
ticks=N
szintaxissal kell megadni a declare
blokk direktíva részében.
Az egyes tick-ekre bekövetkező esemény(ek) a
register_tick_function() függvénnyel
állítható(ak) be. Lásd az alábbi példát. Akár több
esemény is bekövetkezhet egy tick-re.
Példa 12-1. A PHP kód egy részének időmérése <?php
// Ez a függvény megjegyzi a hívása időpontjait
function idopontok ($visszaadni = FALSE)
{
static $idopontok;
// Visszaadja a $profile tartalmát, és törli
if ($visszaadni) {
$idok = $idopontok;
unset ($idopontok);
return ($idok);
}
$idopontok[] = microtime();
}
// A tick kezelő beállítása
register_tick_function("idopontok");
// Beállítjuk az első időpontot a declare előtt
idopontok();
// A kódblokk futtatása, minden második utasítás egy tick
declare (ticks = 2) {
for ($x = 1; $x < 50; ++$x) {
echo similar_text (md5($x), md5($x*$x)), "<br />";
}
}
// Az időmérő függvény adatainak kiírása
print_r (idopontok(TRUE));
?> |
|
A fenti példa a declare blokkban lévő PHP kód sebességét
méri, rögzítve minden második alacsonyszintű utasítás
végrehajátásának időpontját. Ez az információ alkalmas
lehet arra, hogy megtaláld a lassan futó részeket a
kódodban. Ezt a hatást másképp is el lehet érni,
de tick-eket használva sokkal kényelmesebb és könnyebben
megvalósítható megoldást kapsz.
A tick-ek kiválóan alkalmasak hibakeresésre, egyszerű
multitasking megvalósítására, háttérben futattott I/O-ra,
és sok más feladatra.
Lásd még a register_tick_function() és
az unregister_tick_function() függvényeket.