(PHP 4, PHP 5, PHP 7)
A instrução declare é usada para definir diretivas de execução para um bloco de código. A sintaxe do declare é similar à sintaxe de outros construtos de controle de fluxo:
declare (directive) statement
A seção directive permite que o comportamento do bloco do declare seja definido. Atualmente três diretivas são reconhecidas: a diretiva ticks (Veja abaixo para mais informações da diretiva ticks), a diretiva encoding (Veja abaixo para mais informações da diretiva encoding) e a diretiva strict_types (Veja abaixo para mais informações na seção strict sobre argumentos de função).
Versão | Descrição |
---|---|
5.3.0 | Adicionada a diretiva encoding |
7.0.0 | Adicionada a diretiva strict_types |
Como as diretivas são manipuladas na compilação do arquivo, somente literais podem ser usadas como valores da diretiva. 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);
?>
A declaração parte do bloco do declare será executada - como é executada e quais os efeitos colaterais 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 incluído, não afetará 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 a 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 a 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 Exemplo de uso do Tick
<?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 Exemplo de uso dos 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().
A codificação de um script pode ser especificada, por script, utilizando a diretiva 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.
O valor de codificação em declare será ignorada no PHP 5.3 exceto se compilado com --enable-zend-multibyte.
Note que o PHP não mostra se --enable-zend-multibyte foi usada na compilação, com exceção da utilização da função phpinfo().
Veja mais zend.script_encoding.