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:
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 |
---|---|
7.0.0 | Adicionada a diretiva strict_types |
7.0.0 |
A diretiva ticks não escapa mais para diferentes
unidades de compilação.
|
5.3.0 | Adicionada a diretiva encoding |
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.