Manuel PHP
Précédent | Chapitre 11. Les structures de contrôle | Suivant

# `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 é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 :

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

    <?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 :

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

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

Précédent | Sommaire | Suivant
`continue` | Niveau supérieur | `declare`