Manual do PHP
Anterior | Capítulo 11. Estruturas de Controle | Próxima

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

Exemplo 11-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));
?>`

No exemplo acima, o bloco 'declare' grava os tempos a cada segundo nível dentro das instruções no bloco enquanto executam. Esta informação pode ser utilizada para encontrar áreas lentas em segmentos particulares de código. Este processo pode ser realizado de outras formas, mas a utilização de ticks é mais conveniente e fácil de implementar.

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

Anterior | Principal | Próxima
`switch` | Acima | return