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;
}
?>