Une alternative pratique : switch

En théorie, les structures à base de if… elseif… else que je viens de vous montrer suffisent pour traiter n'importe quelle condition.

Mais alors, pourquoi se compliquer la vie avec une autre structure ?



Pour vous faire comprendre l'intérêt de switch, je vais vous donner un exemple un peu lourd avec les if et elseif que vous venez d'apprendre :

Code : PHP 

 1

 2

 3

 4

 5

 6

 7

 8

 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

<?php

if ($note == 0)

{

    echo "Tu es vraiment un gros Zéro !!!";

}

   

elseif ($note == 5)

{

    echo "Tu es très mauvais";

}


elseif ($note == 7)

{

    echo "Tu es mauvais";

}

   

elseif ($note == 10)

{

    echo "Tu as pile poil la moyenne, c'est un peu juste…";

}

   

elseif ($note == 12)

{

    echo "Tu es assez bon";

}


elseif ($note == 16)

{

    echo "Tu te débrouilles très bien !";

}

   

elseif ($note == 20)

{

    echo "Excellent travail, c'est parfait !";

}

     

else

{

    echo "Désolé, je n'ai pas de message à afficher pour cette note";

}

?>



Comme vous le voyez, c'est lourd, long, et répétitif. Dans ce cas, on peut utiliser une autre structure plus souple : c'est switch.

Voici le même exemple avec switch (le résultat est le même, mais le code est plus adapté) :

Code : PHP 

 1

 2

 3

 4

 5

 6

 7

 8

 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

<?php

$note = 10;


switch ($note) // on indique sur quelle variable on travaille

    case 0: // dans le cas où $note vaut 0

        echo "Tu es vraiment un gros Zér0 !!!";

    break;

    

    case 5: // dans le cas où $note vaut 5

        echo "Tu es très mauvais";

    break;

    

    case 7: // dans le cas où $note vaut 7

        echo "Tu es mauvais";

    break;

    

    case 10: // etc. etc.

        echo "Tu as pile poil la moyenne, c'est un peu juste…";

    break;

    

    case 12:

        echo "Tu es assez bon";

    break;

    

    case 16:

        echo "Tu te débrouilles très bien !";

    break;

    

    case 20:

        echo "Excellent travail, c'est parfait !";

    break;

    

    default:

        echo "Désolé, je n'ai pas de message à afficher pour cette note";

}

?>



Testez donc ce code !
Essayez de changer la note (dans la première instruction) pour voir comment PHP réagit ! Et si vous voulez apporter quelques modifications à ce code (vous allez voir qu'il n'est pas parfait), n'hésitez pas, ça vous fera de l'entraînement !

Tout d'abord, il y a beaucoup moins d'accolades (elles marquent seulement le début et la fin du switch).

case signifie « cas ». Dans le switch, on indique au début sur quelle variable on travaille (ici $note). On dit à PHP : Je vais analyser la valeur de $note. Après, on utilise des case pour analyser chaque cas (case 0case 10, etc.). Cela signifie  : Dans le cas où la valeur est 0… Dans le cas où la valeur est 10…

Avantage : on n'a plus besoin de mettre le double égal ! Défaut : ça ne marche pas avec les autres symboles (< > <= >= !=). En clair, le switch ne peut tester que l'égalité.

Le mot-clé default à la fin est un peu l'équivalent du else. C'est le message qui s'affiche par défaut quelle que soit la valeur de la variable.



Il y a cependant une chose importante à savoir : supposons dans notre exemple que la note soit de 10. PHP va lire : case 0 ? Non. Je saute. case 5 ? Non plus. Je saute. case 7 ? Non plus. Je saute. case 10 ? Oui, j'exécute les instructions. Mais contrairement aux elseif, PHP ne s'arrête pas là et continue à lire les instructions des case qui suivent ! case 12case 16, etc.

Pour empêcher cela, utilisez l'instruction break;. L'instruction break demande à PHP de sortir du switch. Dès que PHP tombe sur break, il sort des accolades et donc il ne lit pas les case qui suivent. En pratique, on utilise très souvent un break car sinon, PHP lit des instructions qui suivent et qui ne conviennent pas.
Essayez d'enlever les break dans le code précédent, vous allez comprendre pourquoi ils sont indispensables !

Quand doit-on choisir if, et quand doit-on choisir switch ?



C'est surtout un problème de présentation et de clarté. Pour une condition simple et courte, on utilise le if, et quand on a une série de conditions à analyser, on préfère utiliser switch pour rendre le code plus clair.

Créé avec HelpNDoc Personal Edition: Éditeur de documentation CHM facile