L'instruction switch équivaut
à une série d'instructions if.
En de nombreuses occasions, vous aurez besoin de comparer
la même variable (ou expression) avec un grand nombre
de valeurs différentes, et d'exécuter
différentes parties de code suivant la valeur
à laquelle elle est égale. C'est exactement
à cela que sert l'instruction switch.
Note :
Notez que contrairement à d'autres langages, la structure
continue s'applique
aux structures switch et se comporte de la même manière que
break.
Si vous avez un switch dans une boucle, et que vous
souhaitez continuer jusqu'Ã la prochaine itération de la boucle
extérieure, vous vous devez utiliser continue 2.
Les deux exemples suivants sont deux manières
différentes d'écrire la même chose,
l'une en utilisant une séries de if,
et l'autre en utilisant l'instruction switch :
Exemple 16-23. Instruction switch
<?php if ($i == 0) { echo "i égale 0"; } elseif ($i == 1) { echo "i égale 1"; } elseif ($i == 2) { echo "i égale 2"; }
switch ($i) { case 0: echo "i égale 0"; break; case 1: echo "i égale 1"; break; case 2: echo "i égale 2"; break; } ?>
|
|
Exemple 16-24. Instruction switch utilisant une chaîne de caractères
<?php switch ($i) { case "tarte": echo "i est une tarte"; break; case "barre": echo "i est une barre"; break; case "gateau": echo "i est un gateau"; break; } ?>
|
|
Il est important de comprendre que l'instruction
switch exécute chacune des
clauses dans l'ordre. L'instruction switch
est exécutée ligne par ligne. Au début,
aucun code n'est exécuté. Seulement
lorsqu'un case est vérifié,
PHP exécute alors les instructions correspondantes.
PHP continue d'exécuter les instructions jusqu'Ã
la fin du bloc d'instructions du switch,
ou bien dès qu'il trouve l'instruction break.
Si vous ne pouvez pas utiliser l'instruction
break à la fin de l'instruction
case, PHP continuera à exécuter
toutes les instructions qui suivent. Par exemple :
Exemple 16-25. Instruction switch et fall through
<?php switch ($i) { case 0 : echo "i égale 0"; case 1 : echo "i égale 1"; case 2 : echo "i égale 2"; } ?>
|
|
Dans cet exemple, si $i est égal à 0, PHP va
exécuter quand même toutes les instructions qui
suivent! Si $i est égal à 1, PHP exécutera
les deux dernières instructions. Et seulement si $i est
égal à 2, vous obtiendrez le résultat
escompté, c'est-Ã -dire, l'affiche de
"i égal 2". Donc, l'important est de ne pas oublier
l'instruction break (même s'il est
possible que vous l'omettiez dans certaines circonstances).
Dans une commande switch, une condition n'est
évaluée qu'une fois, et le résultat est
comparé Ã chaque case.
Dans une structure elseif, les conditions sont
évaluées à chaque comparaison. Si votre
condition est plus compliquée qu'une simple
comparaison, ou bien fait partie d'une boucle,
switch sera plus rapide.
La liste de commandes d'un case peut
être vide, auquel cas PHP utilisera la liste de
commandes du cas suivant.
Exemple 16-26. Instruction switch et cas vide
<?php switch ($i) { case 0: case 1: case 2: echo "i est plus petit que 3 mais n'est pas négatif"; break; case 3 : echo "i égale 3"; } ?>
|
|
Un case spécial est
default. Ce cas est utilisé lorsque tous
les case ont échoués. Il doit
être le dernier cas listé. Par exemple :
Exemple 16-27. Instruction switch et default
<?php switch ($i) { case 0: echo "i égale 0"; break; case 1: echo "i égale 1"; break; case 2: echo "i égale 2"; break; default: echo "i n'est ni égal à 2, ni à 1, ni à 0."; } ?>
|
|
Une autre chose à mentionner est que la valeur du
case peut être toute expression de
type scalaire, c'est-Ã -dire nombre entier, nombre
à virgule flottante et chaîne de caractères.
Les tableaux sont sans intérêt dans ce contexte-là .
La syntaxe alternative pour cette structure de contrôle est
la suivante : pour plus d'informations, voir
syntaxes alternatives).
Exemple 16-28. Instruction switch alternative
<?php switch ($i): case 0: echo "i égale 0"; break; case 1: echo "i égale 1"; break; case 2: echo "i égale 2"; break; default: echo "i n'est ni égal à 2, ni à 1, ni à 0"; endswitch; ?>
|
|