Sintaxis alternativa

(PHP 4, PHP 5, PHP 7, PHP 8)

PHP ofrece otra manera de agrupar instrucciones dentro de un bloque, para las funciones de control if, while, for, foreach y switch. En cada caso, el principio es reemplazar la llave de apertura por dos puntos (:) y la llave de cierre por, respectivamente, endif;, endwhile;, endfor;, endforeach;, o endswitch;.

<?php if ($a == 5): ?>
A igual 5
<?php endif; ?>

En el ejemplo anterior, el bloque HTML "A igual 5" se incluye dentro de un if utilizando esta nueva sintaxis. Este código HTML solo se mostrará si la variable $a es igual a 5.

Esta otra sintaxis también funciona con else y elseif. El siguiente ejemplo muestra una estructura con un if, un elseif y un else utilizando esta otra sintaxis:

<?php
if ($a == 5):
echo
"a igual 5";
echo
"...";
elseif (
$a == 6):
echo
"a igual 6";
echo
"!!!";
else:
echo
"a no vale ni 5 ni 6";
endif;
?>

Nota:

No se puede utilizar diferentes sintaxis en el mismo bloque de control.

Advertencia

Cualquier visualización (incluyendo espacios) entre una estructura switch y el primer case producirá un error de sintaxis. Por ejemplo, esto no es válido:

<?php switch ($foo): ?>
<?php case 1: ?>
// ...
<?php endswitch; ?>

Mientras que esto es válido, ya que la última nueva línea después de la estructura switch se considera parte de la etiqueta de cierre ?> y, por lo tanto, no se muestra nada entre switch y case:

<?php switch ($foo): ?>
<?php
case 1: ?>
...
<?php endswitch; ?>

Ver también while, for, y if para otros ejemplos.

add a note

User Contributed Notes 1 note

up
27
toxyy
3 years ago
I feel compelled to give a more elegant way using heredoc than the other comment:

<ul>
<?php foreach($list as $item): echo
<<<ITEM
<li id="itm-$item[number]">Item $item[name]</li>
ITEM;
endforeach;
?>
</ul>

Which works better with multi line blocks, as you only need one overall php tag.

(please don't omit the closing </li> tag despite it being legal, personal preference)
To Top