PHP 8.3.4 Released!

Syntaxe alternative

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

PHP propose une autre manière de rassembler des instructions à l'intérieur d'un bloc, pour les fonctions de contrôle if, while, for, foreach et switch. Dans chaque cas, le principe est de remplacer l'accolade d'ouverture par deux points (:) et l'accolade de fermeture par, respectivement, endif;, endwhile;, endfor;, endforeach;, ou endswitch;.

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

Dans l'exemple ci-dessus, le bloc HTML "A égal 5" est inclus à l'intérieur d'un if en utilisant cette nouvelle syntaxe. Ce code HTML ne sera affiché que si la variable $a est égale à 5.

Cette autre syntaxe fonctionne aussi avec le else et elseif. L'exemple suivant montre une structure avec un if, un elseif et un else utilisant cette autre syntaxe :

<?php
if ($a == 5):
echo
"a égale 5";
echo
"...";
elseif (
$a == 6):
echo
"a égale 6";
echo
"!!!";
else:
echo
"a ne vaut ni 5 ni 6";
endif;
?>

Note:

Vous ne pouvez pas utiliser différentes syntaxes dans le même bloc de contrôle.

Avertissement

Tout affichage (y compris d'espaces) entre une structure switch et le premier case va produire une erreur de syntaxe. Par exemple, ceci n'est pas valide :

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

Alors que ceci est valide, vu que la dernière nouvelle ligne après la structure switch est considérée comme faisant partie de la balise de fin ?> et donc, rien n'est affiché entre switch et case :

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

Voir aussi while, for, et if pour d'autres exemples.

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