PHP Velho Oeste 2024

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

User Contributed Notes 1 note

up
20
toxyy
1 year 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