PHP - MySQL [Retour au menu]
Switch - Case

break, default, plages de valeur

Le Switch permet d'avoir une écriture simplifiée, nettement plus lisibile qu'une pile de if then else.

Exemple simple

$Nombre = 2;
switch($Nombre)
  {
  case 1:
    echo "Un";
  case 2:
    echo "Deux";
  case 3:
    echo "Trois";
  }

Dans cet exemple le résultat sera étrangement :
DeuxTrois

Je n'ai pas d'explication quant à ce phénomène, mais j'ai une solution :

Il est nécessaire d'inclure le mot-clé break; afin de l'informer qu'il doit s'arrêter. Le code suivant :

$Nombre = 2;
switch($Nombre)
  {
  case 1:
    echo "Un";
    break;
  case 2:
    echo "Deux";
    break;
  case 3:
    echo "Trois";
    break;
  }

affichera :
Deux

Phénomène lié au break :

Dès qu'une comparaison est exécutée, le break renvoie immédiatement à la ligne d'instruction après le Switch. Exemple :

$Nombre = 5;
switch($Nombre)
  {
  case 5 :
    echo "Cinq";
    break;
  case 5 :
    echo "Five";
    break;
}

Affiche seulement :
Cinq

Gestion des valeurs non prévues avec default

Si nombre est différent de 1,2 ou 3, on veut afficher "Nombre différent de 1, 2 ou 3" :

$Nombre = 5;
switch($Nombre)
  {
  case 1:
    echo "Un";
    break;
  case 2:
    echo "Deux";
    break;
  case 3:
    echo "Trois";
    break;
  default:
    echo "Nombre différent de 1, 2 ou 3";
    break;

}

Gestion des plages de valeur

Il faut savoir que l'écriture

$Nombre = 1;
switch($Nombre)
  {
  case 1:
    echo "Un";
    break;
  }

N'est que la contraction de l'écriture :

$Nombre = 1;
switch($Nombre)
  {
  case $Nombre == 1:
    echo "Un";
    break;
  }

Quand on a compris ça, la gestion des plages de valeurs coule de source. L'exemple suivant affiche :

$Nombre = 32;
switch ($Nombre)
  {
  case ($Nombre < 10) :
    echo "petit";
    break;
  case (($Nombre >= 10) && ($Nombre <= 50)) :
    echo "Moyen";
    break;
  case ($Nombre > 50) : // ou default, c'est pareil
    echo "Grand";
    break; // dernier break facultatif par sa nature même
  }

-