Manuale PHP
Indietro | Capitolo 16. Strutture di controllo | Avanti

# 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.

Esempio 16-3. 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));
?>`

L'esempio descrive il codice PHP all'interno del blocco 'declare', registrando il tempo in cui è stata eseguita ogni seconda istruzione di basso livello. Questa informazione può poi essere usata per trovare le aree lente all'interno di particolari segmenti di codice. Questo processo può essere ottimizzato usando altri metodi: usando i tick è più conveniente e facile da implementare.

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

Indietro | Partenza | Avanti
switch | Risali | return