W3docs

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_types y encoding deben ser la primera instrucción de un archivo y usan la forma de sentencia declare(strict_types=1); — no tienen bloque y por tanto nunca usan enddeclare.
  • ticks es 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 y enddeclare.

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 y enddeclare) no es válido — enddeclare pertenece 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: 3

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

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

Práctica

Práctica
¿Cuál es la forma correcta de terminar la sentencia declare en PHP?
¿Cuál es la forma correcta de terminar la sentencia declare en PHP?
Was this page helpful?