switch
En PHP, le mot-clé "switch" évalue une valeur et exécute différentes actions selon le résultat. Il offre une alternative aux chaînes de "if".
L'instruction switch en PHP
L'instruction PHP switch évalue une expression et exécute le bloc de code correspondant à sa valeur. C'est l'alternative plus lisible à une longue chaîne d'instructions if / elseif / else lorsque vous comparez la même variable à de nombreuses valeurs possibles.
Ce chapitre couvre la syntaxe, le mot-clé essentiel break, la chute intentionnelle, la syntaxe alternative endswitch, et le piège lié à la comparaison lâche qui prend de court la plupart des débutants.
Syntaxe
La syntaxe de base d'une instruction switch en PHP est la suivante :
<?php
switch ($value) {
case $value1:
// Code block here
break;
case $value2:
// Code block here
break;
default:
// Code block here
}PHP compare $value à chaque case de haut en bas. La première correspondance l'emporte : son bloc s'exécute, et break quitte le switch. Si aucun case ne correspond, le bloc default optionnel s'exécute. default n'a pas besoin d'être en dernier, mais le placer à la fin est la convention attendue par les lecteurs.
Pourquoi break est important
L'instruction break arrête l'exécution et sort du bloc switch. Sans elle, PHP continue d'exécuter le code de chaque case suivant jusqu'à rencontrer un break ou la fin du bloc — un comportement appelé fall-through. C'est le bug le plus courant avec switch :
<?php
$role = "editor";
switch ($role) {
case "admin":
echo "Full access. ";
// no break — execution "falls through" to the next case
case "editor":
echo "Can edit content. ";
break;
case "viewer":
echo "Read only.";
break;
}
// Output: Can edit content.Ici editor correspond, affiche son message, et le break sort proprement. Oublier le break après admin laisserait un administrateur continuer à exécuter le code de editor aussi. Voir break pour le mot-clé complet.
Chute intentionnelle (fall-through)
Le fall-through n'est pas toujours une erreur. Empiler des étiquettes case vides permet à plusieurs valeurs de partager un même bloc — une façon propre de regrouper des conditions :
<?php
$month = 2;
switch ($month) {
case 12:
case 1:
case 2:
echo "Winter";
break;
case 3:
case 4:
case 5:
echo "Spring";
break;
default:
echo "Another season";
}
// Output: WinterExemples
Voici quelques exemples pratiques d'utilisation de switch :
<?php
// Example 1
$dayOfWeek = "Wednesday";
switch ($dayOfWeek) {
case "Monday":
case "Tuesday":
case "Wednesday":
case "Thursday":
case "Friday":
echo "It's a weekday.";
break;
case "Saturday":
case "Sunday":
echo "It's a weekend.";
break;
}
// Example 2
$grade = "B";
switch ($grade) {
case "A":
echo "Excellent!";
break;
case "B":
echo "Good job!";
break;
case "C":
echo "Could do better.";
break;
default:
echo "Please enter a valid grade.";
}L'exemple 1 regroupe les noms de jours de la semaine avec des étiquettes case empilées pour distinguer les jours ouvrables du week-end. L'exemple 2 associe une lettre de note à un message de retour, avec default qui intercepte toute valeur ne correspondant à aucun cas.
Le piège de la comparaison lâche
Par défaut, switch compare avec l'égalité lâche (==), de sorte que les valeurs sont comparées après la conversion de type — et non avec le strict ===. Cela peut produire des correspondances surprenantes :
<?php
$value = "1";
switch ($value) {
case 1:
echo "Matched the integer 1!";
break;
default:
echo "Matched default.";
}
// Output: Matched the integer 1!La chaîne "1" correspond à l'entier case 1 car == convertit les types avant de comparer. Lorsque vous avez besoin d'une vérification stricte des types, utilisez une chaîne de if / elseif avec ===, ou utilisez l'expression match (PHP 8+), qui compare strictement et retourne une valeur :
<?php
$grade = "B";
$message = match ($grade) {
"A" => "Excellent!",
"B" => "Good job!",
"C" => "Could do better.",
default => "Please enter a valid grade.",
};
echo $message;
// Output: Good job!match ne fait pas de fall-through et n'a pas besoin de break, ce qui élimine toute une catégorie de bugs.
Syntaxe alternative avec endswitch
Lors de l'intégration de PHP dans des templates HTML, la forme avec deux-points et endswitch peut être plus lisible :
<?php switch ($status): ?>
<?php case "active": ?>
<span>Active</span>
<?php break; ?>
<?php default: ?>
<span>Inactive</span>
<?php endswitch; ?>Avantages
- Lisibilité — un
switchest plus facile à parcourir que plusieurs instructionsiflorsque vous comparez la même variable à plusieurs valeurs. - Évaluation unique — l'expression du switch est évaluée une seule fois, puis comparée à chaque
case.
Chapitres associés
- PHP if...else...elseif — branchement quand les conditions diffèrent
- PHP break et break vs. continue — contrôle du flux
- Opérateurs PHP — comparaison et égalité
- Boucles PHP — répétition de blocs de code