declare
O construtor declare é utilizado para configurar diretivas de execução para blocos de código. A sintaxe do declare é similar a sintaxe de outros construtores de controle.
declare (diretiva) instrucao
A seção diretiva permite o comportamento do bloco declare a ser configurado. Atualmente somente uma diretiva é reconhecida: a diretiva ticks. (veja abaixo para maiores informações em diretiva ticks)
A parte instrucao do bloco declare será executada. Como ela é executada e que efeitos colaterais que podem ocorrem durante a execução dependem da configuração diretiva.
O construtor declare também pode ser utilizado no escopo global, afetando todo o código que se seguir.
<?php
// isso eh o mesmo:
// voce pode fazer isso:
declare(ticks=1) {
// script inteiro aqui
}
// ou pode fazer isto:
declare(ticks=1);
// sctipt inteiro aqui
?>
Ticks
Um tick é um evento que ocorre para cada
N níveis de instruções executados
pelo interpretador com o bloco declare.
O valor para N é especificado
utilizando ticks=N
nos blocos declare das
seções diretiva.
O(s) evento(s) que ocorre(m) em cada tick são especificados utilizando register_tick_function(). Veja o exemplo abaixo para maiores detalhes. Note que mais de um evento pode ocorrer em cada tick.
Example#1 Histórico de um trecho de código PHP
<?php
// Uma função que grava o tempo entre as chamadas
function profile ($dump = FALSE)
{
static $profile;
// Retorna os tempos preservados no histórico, então apaga
if ($dump) {
$temp = $profile;
unset ($profile);
return $temp;
}
$profile[] = microtime ();
}
// Ativa o manipulador do tick
register_tick_function("profile");
// Inicializa a função antes de declarar o bloco
profile();
// Roda um trecho de código, disparando um tick a cada duas instruções
declare(ticks=2) {
for ($x = 1; $x < 50; ++$x) {
echo similar_text(md5($x), md5($x*$x)), "<br />;";
}
}
// Mostra os dados guardados no histórico
print_r(profile (TRUE));
?>
Ticks são idealizados para debug, implementação de multitask simples, processos de I/O em background e afins.
Veja também: register_tick_function() e unregister_tick_function().