W3docs

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_types e encoding devem ser a primeira instrução em um arquivo e utilizam a forma de instrução declare(strict_types=1); — elas não possuem bloco e, portanto, nunca usam enddeclare.
  • 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 e enddeclare.

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 e enddeclare) não é válido — enddeclare pertence 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: 3

O 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 enddeclare

strict_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.

Prática

Prática
Qual é a forma correta de encerrar a instrução declare no PHP?
Qual é a forma correta de encerrar a instrução declare no PHP?
Was this page helpful?