PHP 8.3.22 Released!

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