enddeclare
Aprende cómo PHP enddeclare cierra un bloque declare() en sintaxis de dos puntos, con ejemplos de ticks y errores comunes a evitar.
Introducción
enddeclare es la palabra clave de cierre de un bloque declare() escrito en la sintaxis alternativa de PHP — la forma basada en dos puntos que PHP ofrece como sustituto de las llaves. Así como if: se cierra con endif y foreach: se cierra con endforeach, declare(...): se cierra con enddeclare;.
Esta página cubre qué hace realmente esta palabra clave, la única directiva con la que se usa de forma realista (ticks), la sintaxis exacta que acepta PHP y los errores que producen un error de análisis.
Cuándo necesitas realmente enddeclare
Una directiva declare() establece un comportamiento de ejecución para una región de código. Tiene tres directivas: ticks, strict_types y encoding. De estas:
strict_typesyencodingdeben ser la primera instrucción de un archivo y usan la forma de sentenciadeclare(strict_types=1);— no tienen bloque y por tanto nunca usanenddeclare.tickses la única directiva cuyo efecto está naturalmente delimitado a un bloque de sentencias, por lo que es la que se combina con la sintaxis alternativa yenddeclare.
En la práctica esto significa: recurrirás a enddeclare cuando quieras un bloque ticks y prefieras la sintaxis de dos puntos a las llaves. Esto es poco frecuente en el código moderno, razón por la cual vale la pena fijar la sintaxis con precisión.
Sintaxis
La forma alternativa reemplaza el { de apertura con dos puntos y el } de cierre con enddeclare;:
declare(directive=value):
// statements
enddeclare;La forma equivalente con llaves es:
declare(directive=value) {
// statements
}Las dos formas son intercambiables. Ten en cuenta que
declare(...) { ... } enddeclare;(llaves yenddeclare) no es válido —enddeclarepertenece solo a la forma con dos puntos. Mezclarlas es un error de sintaxis.
Ejemplo: un bloque ticks cerrado con enddeclare
Un tick es un evento que PHP emite cada N sentencias de bajo nivel ejecutadas dentro de un bloque declare(ticks=N). Registrar un manejador con register_tick_function() permite ejecutar código en cada tick — útil para perfilado ligero o ganchos de estilo señal.
<?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";Salida:
Result: 3
Ticks fired: 3El manejador se ejecuta una vez por sentencia dentro del bloque (tres asignaciones → tres ticks). El código fuera del bloque declare(...): ... enddeclare; no dispara ticks.
Errores comunes
No combines llaves con enddeclare
Este es el error más común (y el que los tutoriales más antiguos cometen):
// ❌ Parse error: unexpected token "enddeclare"
declare(ticks=1) {
// ...
} enddeclare;Elige un estilo — ya sea { ... } o : ... enddeclare;.
No uses enddeclare con strict_types o encoding
declare(strict_types=1) y declare(encoding='UTF-8') son directivas de nivel de archivo que no toman bloque, por lo que no hay nada que enddeclare pueda cerrar:
<?php
declare(strict_types=1); // statement form — no block, no enddeclarestrict_types debe ser la primera sentencia del archivo; colocarlo después de cualquier salida o código es un error fatal.
Haz corresponder cada declare(...): con un enddeclare;
Como todas las palabras clave de sintaxis alternativa, un declare(...): abierto debe cerrarse con exactamente un enddeclare;. Olvidarlo deja el bloque sin terminar y PHP reporta un error de "fin de archivo inesperado".
Conclusión
enddeclare cierra un bloque declare(...): escrito en la sintaxis alternativa de PHP. La única directiva con la que lo usarías de forma realista es ticks, ya que strict_types y encoding son sentencias de nivel de archivo sin bloque. Mantén los dos puntos y enddeclare; juntos y nunca los mezcles con llaves, y la palabra clave se comportará de manera predecible.
Para una visión completa de las directivas de ejecución, consulta declare; para la sintaxis alternativa basada en dos puntos en las estructuras de control, consulta PHP Syntax.