La construcción declare es usada para definir
directivas de ejecución para un bloque de código. La sintaxis de
declare es similar a la de las otras estructuras
de control:
Directiva permite asignar el comportamiento del
bloque declare. Actualmente una sola directiva
es reconocida: la directiva ticks (Consultar más
abajo la información sobre la directiva ticks)
La sentencia es lo que se ejecuta -- Como se
ejecuta y que efectos secundarios tiene depende de la directiva
definida en la directiva.
El constructor declare se puede usar tambien
globalmente, afectando a todo el código que le sigue.
Un "tick" es un evento que ocurre por cada
N sentencias de bajo nivel ejecutadas
dentro del bloque declare. El valor de
N es especificado por
ticks=N como
directiva dentro de declare.
El evento que ocurre en cada "tick" es especificado usando la
función register_tick_function(). Ver el
ejemplo más abajo para más detalles. Tener en cuenta que mas de un
evento puede ocurrir por cada "tick"
Ejemplo 11-1. Perfilar una sección de código PHP
<?php // A function that records the time when it is called function profile ($dump = FALSE) { static $profile;
// Return the times stored in profile, then erase it if ($dump) { $temp = $profile; unset ($profile); return ($temp); }
$profile[] = microtime (); }
// Set up a tick handler register_tick_function("profile");
// Initialize the function before the declare block profile ();
// Run a block of code, throw a tick every 2nd statement declare (ticks=2) { for ($x = 1; $x < 50; ++$x) { echo similar_text (md5($x), md5($x*$x)), "<br />;"; } }
// Display the data stored in the profiler print_r (profile (TRUE)); ?>
|
|
Este ejemplo perfila el código PHP dentro del bloque 'declare',
grabando la hora, una sentencia si y otra no, cuando fue
ejecutada. Esta información puede ser usada para encontrar areas
en donde el codigo es lento. Este proceso se puede implementar de
diferentes maneras: usando "ticks" es más conveniente y facil de
implementar.
"Ticks" es una manera muy buena de eliminar errores, implementando
simples trabajos en paralelo, I/O en modo desatendido y otras
tareas.
Ver también register_tick_function() y
unregister_tick_function().