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

  1. switch ($methode) évalue $methode une seule fois et compare le résultat à chaque valeur case avec une comparaison lâche (==).
  2. case "GET" ne correspond pas à "POST", donc l’exécution passe au case suivant.
  3. case "POST" correspond. Comme aucun break ne suit ce libellé, l’exécution continue dans le bloc case "PUT" ; cela regroupe les deux méthodes dans la même branche.
  4. break quitte le switch après l’affichage. Sans lui, l’exécution continuerait vers default.
  5. default sert 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

switchmatch (PHP 8+)
Instruction - ne renvoie pas de valeurExpression - renvoie une valeur
Comparaison lâche (==)Comparaison stricte (===)
Fall-through par défautPas de fall-through ; chaque bras renvoie
Prend en charge des blocs multi-lignes par caseUne 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.