enddeclare
Aprenda como o PHP enddeclare fecha um bloco declare() com sintaxe de dois-pontos, com exemplos de ticks e erros comuns a evitar.
Introdução
enddeclare é a palavra-chave de fechamento para um bloco declare() escrito na sintaxe alternativa do PHP — a forma baseada em dois-pontos que o PHP oferece como substituta para chaves. Assim como if: é fechado por endif e foreach: é fechado por endforeach, declare(...): é fechado por enddeclare;.
Esta página aborda o que a palavra-chave realmente faz, a única diretiva com a qual ela é realisticamente utilizada (ticks), a sintaxe exata que o PHP aceita e os erros que produzem um erro de análise.
Quando você realmente precisa de enddeclare
Uma diretiva declare() define um comportamento de execução para uma região de código. Ela possui três diretivas: ticks, strict_types e encoding. Destas:
strict_typeseencodingdevem ser a primeira instrução em um arquivo e utilizam a forma de instruçãodeclare(strict_types=1);— elas não possuem bloco e, portanto, nunca usamenddeclare.ticksé a única diretiva cujo efeito é naturalmente limitado a um bloco de instruções, por isso é a que se usa em conjunto com a sintaxe alternativa eenddeclare.
Na prática, isso significa: você recorre ao enddeclare quando quer um bloco ticks e prefere a sintaxe de dois-pontos em vez de chaves. Isso é raro no código moderno, o que é exatamente o motivo pelo qual vale a pena compreender a sintaxe com precisão.
Sintaxe
A forma alternativa substitui a { de abertura por dois-pontos e a } de fechamento por enddeclare;:
declare(directive=value):
// statements
enddeclare;A forma equivalente com chaves é:
declare(directive=value) {
// statements
}As duas formas são intercambiáveis. Note que
declare(...) { ... } enddeclare;(chaves eenddeclare) não é válido —enddeclarepertence apenas à forma de dois-pontos. Misturá-las é um erro de sintaxe.
Exemplo: um bloco ticks fechado com enddeclare
Um tick é um evento que o PHP emite a cada N instruções de baixo nível executadas dentro de um bloco declare(ticks=N). Registrar um manipulador com register_tick_function() permite executar código a cada tick — útil para criação de perfil leve ou ganchos no estilo de sinais.
<?php
$ticks = 0;
register_tick_function(function () use (&$ticks) {
$ticks++;
});
declare(ticks=1):
$x = 1;
$y = 2;
$z = $x + $y;
enddeclare;
echo "Result: $z\n";
echo "Ticks fired: $ticks\n";Saída:
Result: 3
Ticks fired: 3O manipulador é executado uma vez por instrução dentro do bloco (três atribuições → três ticks). O código fora do bloco declare(...): ... enddeclare; não aciona ticks.
Erros comuns
Não combine chaves com enddeclare
Este é o erro mais comum (e o que tutoriais mais antigos cometem):
// ❌ Parse error: unexpected token "enddeclare"
declare(ticks=1) {
// ...
} enddeclare;Escolha um estilo — ou { ... } ou : ... enddeclare;.
Não use enddeclare com strict_types ou encoding
declare(strict_types=1) e declare(encoding='UTF-8') são diretivas de nível de arquivo que não recebem bloco, portanto não há nada para o enddeclare fechar:
<?php
declare(strict_types=1); // statement form — no block, no enddeclarestrict_types deve ser a primeira instrução no arquivo; colocá-lo após qualquer saída ou código é um erro fatal.
Corresponda cada declare(...): com um enddeclare;
Como todas as palavras-chave de sintaxe alternativa, um declare(...): aberto deve ser fechado por exatamente um enddeclare;. Esquecê-lo deixa o bloco sem término e o PHP reporta um erro de "fim de arquivo inesperado".
Conclusão
enddeclare fecha um bloco declare(...): escrito na sintaxe alternativa do PHP. A única diretiva com a qual você a usaria realisticamente é ticks, pois strict_types e encoding são instruções de nível de arquivo sem bloco. Mantenha os dois-pontos e enddeclare; juntos e nunca os misture com chaves, e a palavra-chave se comporta de forma previsível.
Para o panorama completo das diretivas de execução, veja declare; para a sintaxe alternativa baseada em dois-pontos nas estruturas de controle, veja PHP Syntax.