endswitch
Le mot-clé endswitch termine un bloc switch en syntaxe alternative PHP, remplaçant l'accolade fermante par un mot-clé explicite.
Introduction
endswitch ferme une instruction switch écrite dans la syntaxe alternative de PHP — la forme qui remplace l'accolade ouvrante { par un deux-points : et l'accolade fermante } par le mot-clé endswitch;. Il ne s'agit pas d'une fonctionnalité de langage distincte, mais du délimiteur de fermeture d'une manière particulière d'écrire switch.
PHP vous offre deux façons équivalentes d'écrire des instructions de bloc comme switch, if, for, foreach et while :
- Syntaxe avec accolades —
switch (...) { ... } - Syntaxe alternative (deux-points) —
switch (...): ... endswitch;
Cette page explique quand endswitch est obligatoire, pourquoi la syntaxe alternative existe, et le piège qui surprend souvent les développeurs.
Syntaxe : accolades vs. endswitch
Les deux extraits ci-dessous font exactement la même chose. La seule différence réside dans la façon dont le bloc est ouvert et fermé.
<?php
// Curly-brace syntax — no endswitch
switch ($n) {
case 1:
echo "one";
break;
default:
echo "other";
}<?php
// Alternative syntax — colon opens, endswitch closes
switch ($n):
case 1:
echo "one";
break;
default:
echo "other";
endswitch;endswitch est obligatoire avec la forme à deux-points et invalide avec la forme à accolades — vous choisissez un style par switch et vous l'appliquez de manière cohérente. Mélanger les deux (un ouvrant : avec un fermant }, ou inversement) provoque une erreur d'analyse syntaxique.
Exemple
Voici un exemple complet et exécutable utilisant la syntaxe alternative :
<?php
$dayOfWeek = 2;
switch ($dayOfWeek):
case 1:
echo "Today is Monday";
break;
case 2:
echo "Today is Tuesday";
break;
case 3:
echo "Today is Wednesday";
break;
case 4:
echo "Today is Thursday";
break;
case 5:
echo "Today is Friday";
break;
default:
echo "It is the weekend!";
endswitch;Comme $dayOfWeek vaut 2, la branche case 2: s'exécute et affiche Today is Tuesday. Le break à la fin de chaque branche sort du switch afin que les cas suivants ne s'exécutent pas, et default: traite toute valeur qui ne correspond à aucun case. La ligne endswitch; ferme la structure ; l'exécution continue avec ce qui vient après.
Pourquoi utiliser la syntaxe alternative ?
La forme à deux-points existe principalement pour les gabarits qui entremêlent PHP et HTML. Lorsque le corps d'une structure de contrôle s'étend sur de nombreuses lignes de balisage, une } égarée est facile à mal placer et difficile à repérer visuellement. Le mot-clé nommé endswitch rend le point de fermeture évident — on voit d'un coup d'œil qu'il est associé à switch, de la même façon que </div> est associé à <div>.
Ce motif est courant dans les gabarits PHP purs (et dans les frameworks qui les compilent) :
<?php switch ($status): ?>
<?php case 'active': ?>
<p>Your account is active.</p>
<?php break; ?>
<?php case 'pending': ?>
<p>Your account is awaiting approval.</p>
<?php break; ?>
<?php default: ?>
<p>Account status unknown.</p>
<?php endswitch; ?>Ici, les cas génèrent du HTML directement plutôt que d'utiliser echo. La syntaxe alternative garde chaque balise <?php ?> courte et le endswitch de fermeture auto-documenté. Avec des accolades, le fermant serait un simple <?php } ?> — bien moins lisible au milieu d'un mur de balisage.
Piège courant : pas de sortie avant le premier case
Dans la syntaxe alternative switch, vous ne devez émettre ni HTML ni espace entre la ligne switch(...): et le premier case. Dans un gabarit, tout texte placé là est envoyé au navigateur de façon inconditionnelle et PHP émet un avertissement ; gardez donc la balise ouvrante collée au premier <?php case ...: ?>.
Références associées
switchet PHPswitch— l'instruction queendswitchfermebreak— sort d'uncasepour éviter la chute vers le suivantendif,endfor,endforeach— les mêmes fermetures en syntaxe alternative pour d'autres structures de contrôle