Jusqu'ici on a créé des variables et stocké des valeurs, mais pour rendre nos scripts vraiment utiles, on a besoin d'y ajouter de la logique. C'est là qu'interviennent les conditions, qui permettent d'exécuter du code différent selon qu'une valeur remplit ou non certains critères. Pour aller plus loin, on pourra consulter la documentation officielle.
Le if / else
La syntaxe de base est le if / else. Prenons un exemple simple : on veut savoir si un élève a la moyenne.
Entre les parenthèses du if, on place une condition, c'est-à-dire une expression qui vaut true ou false. Si elle est vraie, le bloc entre les accolades est exécuté ; sinon, c'est le bloc du else.
Pour les comparaisons, on dispose des opérateurs classiques : > (strictement supérieur), >= (supérieur ou égal), < (strictement inférieur) et <= (inférieur ou égal).
Le else if
Lorsqu'on a besoin de tester plusieurs cas, on peut imbriquer des conditions, mais c'est vite illisible. La solution plus propre est le else if :
C'est une écriture plus "plate" qui reste facile à lire, même avec plusieurs cas à traiter.
Double égal vs triple égal
Pour tester une égalité, on utilise == (double égal). Attention à ne pas confondre avec = (simple égal) qui est une affectation; utilisé dans un if, il sera toujours évalué à true et c'est une source de bug classique chez les débutants.
Il existe aussi le triple égal ===, qui vérifie en plus que les deux valeurs sont du même type. C'est une différence importante en PHP.
Quand l'utilisateur tape quelque chose avec readline(), c'est toujours une chaîne de caractères. Avec ==, PHP fait une conversion implicite et compare quand même les valeurs. Avec ===, la comparaison "10" === 10 est false parce que l'un est une chaîne et l'autre un entier.
De manière générale, on conseille de toujours utiliser === et de convertir explicitement les valeurs si nécessaire :
En mettant le type entre parenthèses devant la valeur ((int), (float), (string)...), on force la conversion et on sait exactement avec quoi on travaille.
Le switch / case
Quand une variable peut prendre plusieurs valeurs discrètes et qu'on veut faire quelque chose de différent pour chacune, le switch est une syntaxe plus adaptée que de chaîner des else if.
Quelques points importants :
- Chaque cas se termine par un
break. Sans lui, PHP continue d'exécuter les cas suivants, ce qui mène à des comportements inattendus. - Le
defaultest l'équivalent duelse: il est exécuté si aucun cas ne correspond.
On peut tout à fait remplacer un switch par une série de if / else if, les deux approches sont valides. Le switch est juste plus lisible quand on a beaucoup de cas à tester sur la même variable.
Les opérateurs logiques
Une condition peut combiner plusieurs tests grâce aux opérateurs logiques. En PHP :
&&signifie ET : les deux conditions doivent être vraies.||signifie OU : au moins une des conditions doit être vraie.
Exemple concret : on veut savoir si un magasin est ouvert, sachant qu'il ouvre de 9h à 12h et de 14h à 17h.
Voici un rappel du comportement des opérateurs logiques :
| A | B | A && B | A \ | \ | B |
|---|---|---|---|---|---|
| vrai | vrai | vrai | vrai | ||
| vrai | faux | faux | vrai | ||
| faux | vrai | faux | vrai | ||
| faux | faux | faux | faux |
Inverser une condition
Pour inverser une condition, on utilise le ! (point d'exclamation) :
!true donne false, et !false donne true. C'est le moyen le plus simple d'inverser n'importe quelle condition.
Résumé
if/else if/elsepour les conditions classiques.switch/casequand on teste plusieurs valeurs possibles d'une même variable.- Toujours préférer
===au==pour éviter les surprises liées à la conversion de types. &&pour le ET logique,||pour le OU logique.!pour inverser une condition.
On aura l'occasion de pratiquer tout ça dans le prochain chapitre avec les boucles, où on va construire des scripts plus poussés.