endswitch
La sentencia endswitch cierra un bloque switch con sintaxis alternativa en PHP. Aprende cuándo usarla y cómo funciona.
Introducción
endswitch cierra una sentencia switch escrita con la sintaxis alternativa de PHP — la forma que reemplaza la llave de apertura { con dos puntos : y la llave de cierre } con la palabra clave endswitch;. No es una característica del lenguaje independiente, sino el delimitador de cierre de una forma particular de escribir switch.
PHP ofrece dos formas equivalentes de escribir sentencias de bloque como switch, if, for, foreach y while:
- Sintaxis de llaves —
switch (...) { ... } - Sintaxis alternativa (de dos puntos) —
switch (...): ... endswitch;
Esta página explica cuándo se requiere endswitch, por qué existe la sintaxis alternativa y el error común que confunde a la gente.
Sintaxis: llaves vs. endswitch
Los dos fragmentos a continuación hacen exactamente lo mismo. La única diferencia es cómo se abre y cierra el bloque.
<?php
// Curly-brace syntax — no endswitch
switch ($n) {
case 1:
echo "one";
break;
default:
echo "other";
}<?php
// Alternative syntax — colon opens, endswitch closes
switch ($n):
case 1:
echo "one";
break;
default:
echo "other";
endswitch;endswitch es obligatorio con la forma de dos puntos e inválido con la forma de llaves — se elige un estilo por cada switch y se mantiene consistente. Mezclarlos (un abridor : con un cierre }, o viceversa) produce un error de análisis.
Ejemplo
Este es un ejemplo completo y ejecutable usando la sintaxis alternativa:
<?php
$dayOfWeek = 2;
switch ($dayOfWeek):
case 1:
echo "Today is Monday";
break;
case 2:
echo "Today is Tuesday";
break;
case 3:
echo "Today is Wednesday";
break;
case 4:
echo "Today is Thursday";
break;
case 5:
echo "Today is Friday";
break;
default:
echo "It is the weekend!";
endswitch;Como $dayOfWeek es 2, la rama case 2: se ejecuta e imprime Today is Tuesday. El break al final de cada rama sale del switch para que los casos siguientes no se ejecuten, y default: maneja cualquier valor que no coincida con ningún case. La línea endswitch; cierra la estructura; la ejecución continúa con lo que venga después.
¿Por qué usar la sintaxis alternativa?
La forma de dos puntos existe principalmente para plantillas que intercalan PHP y HTML. Cuando el cuerpo de una estructura de control abarca muchas líneas de marcado, una } extraviada es fácil de colocar mal y difícil de emparejar a simple vista. La palabra clave nombrada endswitch hace que el punto de cierre sea obvio — se puede ver de un vistazo que hace pareja con switch, del mismo modo que </div> hace pareja con <div>.
Este patrón es habitual en plantillas PHP puras (y en los frameworks que compilan hacia ellas):
<?php switch ($status): ?>
<?php case 'active': ?>
<p>Your account is active.</p>
<?php break; ?>
<?php case 'pending': ?>
<p>Your account is awaiting approval.</p>
<?php break; ?>
<?php default: ?>
<p>Account status unknown.</p>
<?php endswitch; ?>Aquí los casos generan HTML directamente en lugar de usar echo. La sintaxis alternativa mantiene cada etiqueta <?php ?> corta y el endswitch de cierre autodocumentado. Con llaves, el cierre sería un solitario <?php } ?> — mucho menos legible dentro de una pared de marcado.
Error común: no emitir nada antes del primer case
Con la sintaxis alternativa de switch no se debe emitir ningún HTML ni espacio en blanco entre la línea switch(...): y el primer case. En una plantilla, el texto colocado ahí se envía al navegador de forma incondicional y PHP genera una advertencia, así que mantén la etiqueta de apertura justo antes del primer <?php case ...: ?>.
Referencias relacionadas
switchy PHPswitch— la sentencia queendswitchcierrabreak— sale de uncasepara que la ejecución no continúe al siguienteendif,endfor,endforeach— los mismos cierres de sintaxis alternativa para otras estructuras de control