(PHP 4, PHP 5)
A instrução declare é usado para definir diretivas de execução para um bloco de código. A sintaxe do declare é similar à sintaxe de outras estruturas de controle de fluxo:
declare (directive) statement
A seção directive permite que o comportamento do bloco do declare seja definido. Atualmente duas 'directive' são reconhecidas: a 'directive' ticks (Veja abaixo para mais informações da 'directive' ticks ) e a 'directive' encoding (Veja abaixo para mais informações da 'directive' encoding ).
Nota: A 'directive' encoding foi adicionada no PHP 5.3.0
Como as 'directives' são tratadas enquanto o arquivo é compilado, somente literais podem ser usadas como valores de 'directives'. Variáveis e constantes não podem ser usadas. Para ilustrar:
<?php
// Isto é válido:
declare(ticks=1);
// isto é inválido:
const TICK_VALUE = 1;
declare(ticks=TICK_VALUE);
?>
O statement que faz parte do bloco do declare será executado - como ele é executado e quais os efeitos secundários que ocorrem durante a execução depende da diretiva definida no bloco directive.
O construtor do declare também pode ser usado no escopo global, afetando todo o código que o segue (entretanto se o arquivo com o declare for incluido ele não afeta o arquivo principal).
<?php
// these are the same:
// you can use this:
declare(ticks=1) {
// entire script here
}
// or you can use this:
declare(ticks=1);
// entire script here
?>
Um 'tick' é um evento que ocorre para cada
N declarações de baixo nível executadas
pelo interpretador dentro do bloco declare.
O valor de N é especificado
usando ticks=N
dentro do bloco declare da seção
directive.
Nem todas declarações são passiveis de executar um 'tick'. Normalmente, expressões de condições e argumentos de expressões não são.
O(s) evento(s) que serão executados em cada 'tick' são especificados usando a função register_tick_function(). Veja o exemplo abaixo para mais detalhes. Note que mais de um evento pode ser executado para cada 'tick'.
Exemplo #1 Tick usage example
<?php
declare(ticks=1);
// A function called on each tick event
function tick_handler()
{
echo "tick_handler() called\n";
}
register_tick_function('tick_handler');
$a = 1;
if ($a > 0) {
$a += 2;
print($a);
}
?>
Exemplo #2 Exemplos de uso de 'Ticks'
<?php
function tick_handler()
{
echo "tick_handler() called\n";
}
$a = 1;
tick_handler();
if ($a > 0) {
$a += 2;
tick_handler();
print($a);
tick_handler();
}
tick_handler();
?>
Veja mais sobre register_tick_function() e unregister_tick_function().
O encoding de um código pode ser definido no script usando a 'directive' encoding.
Exemplo #3 Declarando um encoding para o script.
<?php
declare(encoding='ISO-8859-1');
// code here
?>
Quando usada com namespaces, a única sintaxe válida para declarar é declare(encoding='...'); onde ... é o valor do encoding. declare(encoding='...') {} irá resultar em um erro de sintaxe quando usada com namespaces.
A declarão de encoding é ignorada no PHP 5.3 exceto seo o PHP for compilado com --enable-zend-multibyte.
Note que o PHP não mostra se --enable-zend-multibyte foi usada para compilar com exceção da utilização do phpinfo().
Veja mais zend.script_encoding.