Instruction PHP switch avec case et default
L’instruction switch en PHP compare une expression à une liste de valeurs case et exécute la première branche qui correspond. Utilisez-la lorsqu’une variable prend l’une de plusieurs options fixes et que chaque option déclenche une logique différente. Regrouper plusieurs étiquettes case (chaque instruction case en PHP) dans une même branche évite les conditions répétées dans de longues chaînes if/elseif.
Exemple d’instruction PHP switch pour la correspondance de valeurs
Sortie :
La sortie apparaîtra ici...
Sortie :
Écrire la ressource
Comment cet exemple fonctionne
switch ($methode)évalue$methodeune seule fois et compare le résultat à chaque valeurcaseavec une comparaison lâche (==).case "GET"ne correspond pas à"POST", donc l’exécution passe au case suivant.case "POST"correspond. Comme aucunbreakne suit ce libellé, l’exécution continue dans le bloccase "PUT"; cela regroupe les deux méthodes dans la même branche.breakquitte le switch après l’affichage. Sans lui, l’exécution continuerait versdefault.defaultsert de solution de repli quand aucun case ne correspond. Il est optionnel mais recommandé pour du code défensif.
PHP switch utilise-t-il une comparaison stricte ou lâche ?
switch en PHP utilise la comparaison lâche (==), donc les valeurs peuvent être converties pendant la correspondance. Un piège fréquent : "0" correspond à case 0, et false correspond aussi à case 0. L’ordre des cases compte : la première correspondance lâche gagne. Quand la comparaison stricte est nécessaire, utilisez match (PHP 8+) ou des if/elseif explicites avec ===.
Erreurs courantes avec PHP switch
break manquant (fall-through accidentel) :
Incorrect :
$role = "admin";
switch ($role) {
case "admin":
$label = "admin";
case "editor":
$label = "editor";
break;
}
Correct :
$role = "admin";
switch ($role) {
case "admin":
$label = "admin";
break;
case "editor":
$label = "editor";
break;
}
Sans break, un case correspondant continue d’exécuter les branches suivantes. Le fall-through intentionnel doit regrouper les libellés sans code entre eux.
Utiliser continue dans une boucle en pensant passer à l’itération suivante :
Incorrect :
$elements = ["garder", "sauter", "garder"];
foreach ($elements as $element) {
switch ($element) {
case "sauter":
continue; // quitte le switch, pas la boucle
}
echo $element . "\\n";
}
Correct :
$elements = ["garder", "sauter", "garder"];
foreach ($elements as $element) {
switch ($element) {
case "sauter":
continue 2; // passe à l'itération suivante du foreach
}
echo $element . "\\n";
}
Dans un switch imbriqué dans une boucle, continue se comporte comme break pour le switch. Utilisez continue 2 pour cibler la boucle externe.
PHP switch vs expression match
| switch | match (PHP 8+) |
|---|---|
| Instruction - ne renvoie pas de valeur | Expression - renvoie une valeur |
Comparaison lâche (==) | Comparaison stricte (===) |
| Fall-through par défaut | Pas de fall-through ; chaque bras renvoie |
| Prend en charge des blocs multi-lignes par case | Une expression par bras |
Utilisez switch quand les branches contiennent plusieurs instructions ou quand un fall-through intentionnel regroupe des cases. Utilisez match pour mapper une valeur vers un résultat avec une sûreté de type stricte.
FAQ
Pourquoi break est-il nécessaire dans une instruction PHP switch ?
PHP switch utilise le fall-through par défaut : une fois qu’un case correspond, toutes les branches suivantes s’exécutent jusqu’à un break ou la fin du bloc switch. L’instruction break quitte le switch immédiatement. L’omettre n’est sûr que lorsque vous regroupez volontairement des cases qui partagent la même logique.
Quand utiliser match au lieu de switch en PHP 8+ ?
Préférez match quand vous avez besoin d’une comparaison stricte, que vous voulez affecter le résultat à une variable ou que chaque branche tient en une expression. Gardez switch quand les branches contiennent plusieurs instructions, des effets de bord ou un fall-through volontaire entre cases.