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 .

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 :

 
?php

 
if

 
(

 
$i

 
==

 
0

 
)

 
{

 
print

 
"i

 
eacute;gale

 
0"

 
;

 
}

 
if

 
($i

 
==

 
1

 
)

 
{

 
print

 
"i

 
eacute;gale

 
1"

 
;

 
}

 
if

 
($i

 
==

 
2

 
)

 
{

 
print

 
"i

 
eacute;gale

 
2"

 
;

 
}

 
switch

 
($i

 
)

 
{

 
case

 
0

 
:

 
print

 
"i

 
eacute;gale

 
0"

 
;

 
break

 
;

 
case

 
1

 
:

 
print

 
"i

 
eacute;gale

 
1"

 
;

 
break

 
;

 
case

 
2

 
:

 
print

 
"i

 
eacute;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 :

 
?php

 
switch

 
(

 
$i

 
)

 
{

 
case

 
0

 
:

 
print

 
"i

 
eacute;gale

 
0"

 
;

 
case

 
1

 
:

 
print

 
"i

 
eacute;gale

 
1"

 
;

 
case

 
2

 
:

 
print

 
"i

 
eacute;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 .

 
?php

 
switch

 
(

 
$i

 
)

 
{

 
case

 
0

 
:

 
case

 
1

 
:

 
case

 
2

 
:

 
print

 
"i

 
est

 
plus

 
petit

 
que

 
3

 
mais

 
n'est

 
pas

 
n

 
eacute;gatif"

 
;

 
break

 
;

 
case

 
3

 
:

 
print

 
"i

 
eacute;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 :

 
?php

 
switch

 
(

 
$i

 
)

 
{

 
case

 
0

 
:

 
print

 
"i

 
eacute;gale

 
0"

 
;

 
break

 
;

 
case

 
1

 
:

 
print

 
"i

 
eacute;gale

 
1"

 
;

 
break

 
;

 
case

 
2

 
:

 
print

 
"i

 
eacute;gale

 
2"

 
;

 
break

 
;

 
default

 
:

 
print

 
"i

 
n'est

 
ni

 
eacute;gal

 
agrave

 
;

 
2

 
,

 
ni

 
agrave

 
;

 
1

 
,

 
ni

 
agrave

 
;

 
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 ) .

 
?php

 
switch

 
(

 
$i)

 
:

 
case

 
0

 
:

 
print

 
"i

 
eacute;gale

 
0"

 
;

 
break

 
;

 
case

 
1

 
:

 
print

 
"i

 
eacute;gale

 
1"

 
;

 
break

 
;

 
case

 
2

 
:

 
print

 
"i

 
eacute;gale

 
2"

 
;

 
break

 
;

 
default

 
:

 
print

 
"i

 
n'est

 
ni

 
eacute;gal

 
agrave

 
;

 
2

 
,

 
ni

 
agrave

 
;

 
1

 
,

 
ni

 
agrave

 
;

 
0"

 
;

 
endswitch

 
;

 
?