Forum und email

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:

declare (direktíva)
    utasítás

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.

A declare konstukció globális hatáskörben is használható, ilyenkor hatással van minden utána következő kódra.

<?php
// ezek ekvivalensek:

// használhatod ezt:
declare(ticks=1) {
    
// entire script here
}

// vagy használhatod ezt:
declare(ticks=1);
// entire script here
?>

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.

Example#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!