declare
Il costrutto declare si usa per definire direttive di esecuzione per blocchi di istruzioni. La sintassi è simile alla sintassi di altre strutture di controllo:
declare (direttiva) istruzione
La sezione direttiva permette di impostare il comportamento del blocco declare . Attualmente è riconosciuta una sola direttiva: la direttiva ticks. (Fare riferimento più in basso per ulteriori informazioni relative alla direttiva ticks)
Verrà eseguita la parte istruzione del blocco declare -- come verrà eseguita e quali effetti collaterali emergeranno durante l'esecuzione potrà dipendere dalla direttiva impostata nel blocco direttiva.
L'istruzione declare può essere usata anche con visubilità globale, influenzando tutto il codice che la segue.
<?php
// queste righe hanno il medesimo effetto:
// si può utitlizzare in questo modo:
declare(ticks=1) {
// inserire tutto il codice
}
// o in questo modo
declare(ticks=1);
// inserire tutto il codice
?>
Ticks
Un tick è un evento che si verifica per ogni N istruzioni di basso livello eseguite dal parser all'interno del blocco declare. Il valore per N viene specificato usando ticks=N all'interno della sezione direttiva del blocco declare.
L'evento (o gli eventi) che si verifica su ogni tick è specificato usando register_tick_function(). Vedere l'esempio più in basso per ulteriori dettagli. Notare che può verificarsi più di un evento per ogni tick.
Example#1 Segue una sezione di codice PHP
<?php
// Una funzione che registra il tempo quando viene chiamata
function profile($dump = FALSE)
{
static $profile;
// Restituisce il tempo immagazinato in $profile, successivamente lo cancella
if ($dump) {
$temp = $profile;
unset($profile);
return $temp;
}
$profile[] = microtime();
}
// Imposta un tick handler
register_tick_function("profile");
// Inizializza la funzione prima del blocco declare
profile();
// Esegue un blocco di codice, attraverso un tick ogni seconda istruzione
declare(ticks = 2) {
for ($x = 1; $x < 50; ++$x) {
echo similar_text(md5($x), md5($x*$x)), "<br />;";
}
}
// Mostra i dati immagazionati nel profilo
print_r(profile(TRUE));
?>
I tick sono ben adeguati per il debugging, l'implementazione di semplici multitasking, backgrounded I/O e molti altri compiti.
Vedere anche register_tick_function() e unregister_tick_function().