declarePodręcznik PHPPoprzedniRozdział 12. Struktury kontrolneNastępnydeclare
Instrukcja declare służy do ustawienia dyrektyw
wykonawczych dla bloku kodu. Składnia instrukcji jest podobna do składni
innych struktur kontrolnych:
declare (dyrektywa) instrukcje
Argument dyrektywa pozwala na ustawienie zachowania
się danego bloku declare.
W chwili obecnej rozpoznawana jest tylko jedna dyrektywa:
ticks. (Więcej informacju na temat dyrektywy
ticks
w dedykowanym podrozdziale).
Kod zawarty w bloku instrukcje będzie wykonywany. Sposób
i poboczne efekty wykonania tego kodu mogą zależeć od argumentu
dyrektywa.
Ticks
Tyknięcie (tick) jest zdarzeniem, które następuje po każdych
N niskopoziomowych instrukcjach wykonywanych
przez parser wewnątrz bloku declare. Wartość parametru
N jest określana przez umieszczenie wyrażenia
ticks=N wewnątrz argumentu
dyrektywa danego bloku declare.
Zdarzenie wywoływane na każde tyknięcie określa się przez użycie funkcji
register_tick_function(). Więcej szczegółów znajduje
się w poniższym przykładzie. Proszę pamiętać, że z każdym tyknięciem może
być wywoływane więcej niż jedno zdarzenie.
Przykład 12-1. Profilowanie sekcji kodu PHP <?php
// funkcja, która zapisuje czas jej wywołania
function profile ($wyrzuć = FALSE)
{
static $profile;
// zwróć tablicę czasów wywołania i wykasuj jej lokalną kopię
if ($wyrzuć) {
$temp = $profile;
unset ($profile);
return ($temp);
}
$profile[] = microtime ();
}
// ustal wskaźnik tyknięcia
register_tick_function("profile");
// zainicjowanie funkcji przed blokiem declare
profile ();
// wykonaj poniższy kod, generując tyknięcie co 2 instrukcje
declare (ticks=2) {
for ($x = 1; $x < 50; ++$x) {
echo similar_text (md5($x), md5($x*$x)), "<br />";
}
}
// Wyświetl dane przechowywane w profilerze
print_r (profile (TRUE));
?>
Powyższy przykład profiluje kod PHP wewnątrz bloku "declare", zapisując
czas wywołania co drugiej niskopoziomowej instrukcji w bloku instrukcji.
Informację tę można wykorzystać do wykrycia fragmentów kodu wykonywanych
w zbyt wolnym tempie. Problem wyszukania takich fragmentów można
zrealizować na wiele sposobów, przy czym użycie tyknięć jest najwygodniesze
i najłatwiejsze do zaimplementowania.
Tyknięcia są doskonale przystosowane dla potrzeb debugowania, implementacji
prostej wielozadaniowości, wykonywania operacji We/Wy w tle i wielu innych
zadań.
Patrz także register_tick_function() i
unregister_tick_function().
PoprzedniSpis treściNastępnyswitchPoczątek rozdziałureturn