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 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.
Note: Notez que switch/case provoque une perte de comparaison.
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 #1 Instruction switch
<?php
if ($i == 0) {
echo "i �gal 0";
} elseif ($i == 1) {
echo "i �gal 1";
} elseif ($i == 2) {
echo "i �gal 2";
}
switch ($i) {
case 0:
echo "i �gal 0";
break;
case 1:
echo "i �gal 1";
break;
case 2:
echo "i �gal 2";
break;
}
?>
Exemple #2 Instruction switch utilisant une cha�ne de caract�res
<?php
switch ($i) {
case "apple":
echo "i est une tarte";
break;
case "bar":
echo "i est une barre";
break;
case "cake":
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 :
<?php
switch ($i) {
case 0:
echo "i �gal 0";
case 1:
echo "i �gal 1";
case 2:
echo "i �gal 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:
echo "i est plus petit que 3 mais n'est pas n�gatif";
break;
case 3:
echo "i �gal 3";
}
?>
Un cas sp�cial est default. Ce cas est utilis� lorsque tous les autres cas ont �chou�s. Par exemple :
<?php
switch ($i) {
case 0:
echo "i �gal 0";
break;
case 1:
echo "i �gal 1";
break;
case 2:
echo "i �gal 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).
<?php
switch ($i):
case 0:
echo "i �gal 0";
break;
case 1:
echo "i �gal 1";
break;
case 2:
echo "i �gal 2";
break;
default:
echo "i n'est ni �gal � 2, ni � 1, ni � 0";
endswitch;
?>
Il est possible d'utiliser un point-virgule plut�t que deux points apr�s un case, comme ceci :
<?php
switch($beer)
{
case 'leffe';
case 'grimbergen';
case 'guinness';
echo 'Bon choix';
break;
default;
echo 'Merci de faire un choix...';
break;
}
?>