W3docs

case

Découvrez le mot-clé "case" en PHP : syntaxe, fall-through, break et comparaison souple dans l'instruction switch.

En tant que développeur PHP, vous avez peut-être déjà utilisé l'instruction switch pour gérer plusieurs conditions dans votre code. Le mot-clé case est un composant essentiel de l'instruction switch, vous permettant de définir des actions spécifiques à effectuer selon la valeur d'une variable. Cette page couvre la syntaxe de case, le fonctionnement du fall-through et de break, le piège de la comparaison souple, le motif switch (true) pour les plages de valeurs, et la relation entre case et les chaînes if/elseif.

Syntaxe

Le mot-clé case est utilisé pour définir une action spécifique à effectuer selon la valeur d'une variable dans une instruction switch. Voici la syntaxe de base pour utiliser le mot-clé case en PHP :

La syntaxe PHP de case

<?php

switch ($variable) {
  case $value1:
    // Code to execute if $variable equals $value1
    break;
  case $value2:
    // Code to execute if $variable equals $value2
    break;
  default:
    // Code to execute if $variable does not equal any of the specified values
}

Dans cet exemple, le mot-clé case est utilisé pour définir des actions spécifiques à effectuer selon la valeur de la variable $variable. L'instruction break est cruciale : elle met fin au bloc switch et empêche le « fall-through » vers le case suivant. Sans elle, PHP continuera d'exécuter le code des cases suivants jusqu'à rencontrer un break ou la fin du bloc switch. De plus, notez que le switch PHP utilise la comparaison souple (==) par défaut, ce qui signifie que case 0 correspondra également à "0" ou false. Utilisez une logique de comparaison stricte si une correspondance de type exacte est requise.

Exemples

Voyons quelques exemples pratiques illustrant l'utilisation du mot-clé case :

Exemple de case PHP

<?php

// Example 1
$day = "Monday";

switch ($day) {
    case "Monday":
        echo "Today is Monday." . PHP_EOL;
        break;
    case "Tuesday":
        echo "Today is Tuesday.";
        break;
    case "Wednesday":
        echo "Today is Wednesday.";
        break;
    default:
        echo "Today is not Monday, Tuesday, or Wednesday.";
}

// Output: Today is Monday.

// Example 2
$grade = 85;

switch (true) {
    case $grade >= 90:
        echo "A";
        break;
    case $grade >= 80:
        echo "B";
        break;
    case $grade >= 70:
        echo "C";
        break;
    case $grade >= 60:
        echo "D";
        break;
    default:
        echo "F";
}

// Output: B

L'exemple 1 compare directement une valeur de type string. L'exemple 2 utilise le motif switch (true) : chaque case contient une expression booléenne, et le premier qui s'évalue à true est exécuté. C'est la manière idiomatique de gérer des plages de valeurs dans un switch, puisqu'un case ordinaire ne compare que l'égalité.

Regroupement de cases (fall-through intentionnel)

Comme un case sans break tombe dans le suivant, vous pouvez empiler des étiquettes pour exécuter le même bloc pour plusieurs valeurs :

<?php

$day = "Sat";

switch ($day) {
    case "Sat":
    case "Sun":
        echo "Weekend";
        break;
    default:
        echo "Weekday";
}

// Output: Weekend

Ici, "Sat" correspond à la première étiquette, tombe dans le case vide "Sun", et exécute le bloc partagé. C'est la seule situation où omettre break est délibéré plutôt qu'un bug.

Avantages

L'utilisation du mot-clé case présente plusieurs avantages, notamment :

  • Code simplifié : le mot-clé case vous permet d'écrire un code plus court et plus concis, plus facile à lire et à comprendre.
  • Lisibilité améliorée : l'instruction switch offre une structure plus claire que de longues chaînes d'instructions if/elseif lorsqu'on compare une seule variable à plusieurs valeurs.
  • Flexibilité accrue : le mot-clé case vous permet de définir des actions spécifiques selon la valeur d'une variable, rendant votre code plus adaptable à différents scénarios.

Conclusion

Le mot-clé case vous permet de définir des actions spécifiques en fonction de la valeur d'une variable à l'intérieur d'une instruction switch. N'oubliez pas les deux points qui piègent souvent les développeurs : ajoutez break à chaque case sauf si vous souhaitez un fall-through intentionnel, et méfiez-vous de la comparaison souple lors de la correspondance entre nombres et chaînes.

Sujets connexes

Exercice

Pratique
En PHP, lesquels des éléments suivants sont des types de structures de contrôle switch ?
En PHP, lesquels des éléments suivants sont des types de structures de contrôle switch ?
Was this page helpful?