declare
(PHP 4, PHP 5, PHP 7, PHP 8)
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:
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).
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:
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).
Ticks
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().
Codificação
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
?>
Cuidado
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.