declare

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().