Sintassi alternativa per le strutture di controllo

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

PHP offre una sintassi alternativa per alcune delle sue strutture di controllo, ovvero: if, while, for, foreach, e switch. In ognuno di questi casi, l'approccio di base della sintassi alternativa è quello di cambiare la parentesi graffa aperta con il segno di duepunti (:) e la parentesi graffa chiusa rispettivamente con endif;, endwhile;, endfor;, endforeach;, o endswitch;.

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

Nell'esempio presentato, il blocco HTML "A è uguale a 5" è inserito all'interno in un blocco if scritto con la sintassi alternativa. Il blocco HTML sarà visualizzato solo se $a è uguale a 5.

La sintassi alternativa si applica nello stesso modo anche ad else e ad elseif. Quanto segue è un esempio della struttura if con sezioni elseif ed else nel formato alternativo:

<?php
if ($a == 5):
echo
"a è uguale a 5";
echo
"...";
elseif (
$a == 6):
echo
"a è uguale a 6";
echo
"!!!";
else:
echo
"a è diverso sia da 5 che da 6";
endif;
?>

Nota:

L'utilizzo delle due sintassi all'interno dello stesso blocco non è supportato.

Avviso

Qualsiasi output (inclusi gli spazi bianchi) tra un'istruzione switch e il primo case risulterà in un errore sintattico. Per esempio, questo non è valido:

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

Mentre questo è valido, poichè la nuova riga dopo l'istruzione switch è considerata parte della chiusura ?> e quindi non viene scritto niente in output tra lo switch e il case:

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

Vedere anche while, for, ed if per ulteriori esempi.

add a note add a note

User Contributed Notes 1 note

up
20
toxyy
2 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