4.7 Les structures de contrôle
4 Référence
Manuel PHP
. if . else . elseif . Syntaxe alternative . while . do..while . for . foreach . break . continue ->switch . declare . return . require . include . require_once . include_once
|
4.7.11 switch
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 de comporte différemment de
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
:
Instruction switch() |
<?php if ($i == 0) { print "i égale 0"; } if ($i == 1) { print "i égale 1"; } if ($i == 2) { print "i égale 2"; } switch ($i) { case 0: print "i égale 0"; break; case 1: print "i égale 1"; break; case 2: print "i égale 2"; 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 :
Instruction switch et fall through |
<?php switch ($i) { case 0: print "i égale 0"; case 1: print "i égale 1"; case 2: print "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.
Instruction switch() et case vide |
<?php switch ($i) { case 0: case 1: case 2: print "i est plus petit que 3 mais n'est pas négatif"; break; case 3: print "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 :
Instruction switch() et default |
<?php switch ($i) { case 0: print "i égale 0"; break; case 1: print "i égale 1"; break; case 2: print "i égale 2"; break; default: print "i n'est ni égal à 2, ni à 1, ni à 0."; } ?>
|
Une autre chose à mentionner est que l'instruction
case
peut être une 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 ).
Instruction switch() alternative |
<?php switch ($i): case 0: print "i égale 0"; break; case 1: print "i égale 1"; break; case 2: print "i égale 2"; break; default: print "i n'est ni égal à 2, ni à 1, ni à 0"; endswitch; ?>
|
|