if (condition) { ... } n'exécute son bloc que si la condition est vraie. Ajoutez elseif (other condition) { ... } pour d'autres cas et else { ... } pour tout le reste. PHP vérifie les conditions depuis le haut et n'exécute que le premier bloc qui correspond.
Modifiez $temperature et relancez. Comme les tests vont de haut en bas, 24 s'arrête à la deuxième condition et n'atteint jamais >= 10, même si celle-ci est aussi vraie. Ordonnez vos conditions de la plus précise à la plus générale.
elseif ou else if
Avec des accolades, elseif et else if font la même chose. else if est techniquement un else dont le corps est un nouveau if, mais le résultat est identique.
La différence n'apparaît qu'avec la syntaxe à deux-points utilisée dans les templates (sections suivantes). Là, else if casse le code :
<?php $score = 72; ?>
<?php if ($score >= 90): ?>
<p>A</p>
<?php else if ($score >= 60): ?>
<p>Passed</p>
<?php endif; ?>
PHP Parse error: syntax error, unexpected token "if", expecting ":" in /home/index.php on line 4
Écrivez elseif en un seul mot et vous ne rencontrerez jamais cette erreur.
Plusieurs conditions avec && et ||
&& (et) exige que les deux côtés soient vrais, || (ou) qu'au moins un le soit, et ! inverse une condition. PHP arrête l'évaluation dès que la réponse est connue, donc dans $user !== null && $user['active'], la seconde partie ne s'exécute que s'il y a un utilisateur.
Quand vous mélangez && et ||, ajoutez des parenthèses : && est prioritaire, et les parenthèses rendent l'intention évidente pour le prochain lecteur. PHP a aussi les mots-clés and et or, mais ils sont moins prioritaires que =, donc $ok = true and false; met $ok à true. Tenez-vous-en à && et ||.
Ce qui compte comme vrai dans un if
La condition n'a pas besoin d'être un booléen. PHP la convertit, et une poignée de valeurs comptent comme fausses : false, 0, 0.0, "", "0", [] et null. Tout le reste est vrai, y compris "false", " " et "0.0".
| $x | bool | empty |
|---|---|---|
| false | ||
| 0 | ||
| 0.0 | ||
| "" | ||
| "0" | ||
| null | ||
| [] | ||
| " " | ||
| "0.0" | ||
| "a" | ||
| [0] | ||
| 1 |
C'est pourquoi if ($items) est une façon courante de dire « le tableau n'est pas vide ». La ligne "0" est celle qui piège : un champ de formulaire où quelqu'un a tapé 0 est une chaîne non vide, et pourtant if ($_POST['qty']) la traite comme fausse. Comparez explicitement (if ($qty !== '')) quand zéro est une réponse valide. Les mêmes règles décident de ce que renvoie empty().
if else dans du HTML avec if: et endif;
Entre des balises HTML, les accolades se perdent facilement. PHP a une syntaxe alternative : deux-points après la condition, elseif ...: et else: pour les autres branches, et endif; à la fin. Exécutez ce bloc, puis cliquez sur les scores dans l'onglet Page : chaque lien exécute à nouveau le même script avec un nouveau $_GET['score'].
<?= $score ?> est le raccourci de <?php echo $score; ?>. Le même style à deux-points existe pour les boucles (foreach: endforeach;, while: endwhile;) et c'est celui qu'utilisent la plupart des templates PHP.
if sur une ligne et opérateur ternaire
Une seule instruction peut suivre la condition sans accolades. Cela fonctionne, mais la prochaine ligne que vous ajouterez ne sera pas dans le if, c'est pourquoi beaucoup de guides de style exigent toujours des accolades. Pour choisir l'une de deux valeurs, l'opérateur ternaire est plus court qu'un if/else complet.
Quand il y a beaucoup de valeurs exactes à comparer à une même variable, une expression match se lit mieux qu'une longue suite d'elseif.
Sortir tôt au lieu d'imbriquer
Des blocs if profondément imbriqués sont difficiles à suivre. Dans une fonction, vérifiez d'abord les cas d'échec et faites un return immédiatement. La logique principale reste alors au bord gauche.
Erreur fréquente : = au lieu de == dans une condition
Un seul = affecte. if ($role = 'admin') stocke 'admin' dans $role puis teste cette chaîne, qui est vraie. Le bloc s'exécute pour tous les utilisateurs, et $role est désormais faux lui aussi.
Utilisez === pour les comparaisons sauf si vous avez une raison de vouloir la conversion de type. Certains écrivent la constante en premier (if ('admin' === $role)), pour qu'un = oublié devienne une erreur au lieu d'une affectation silencieuse.
Questions fréquentes
Quelle est la différence entre elseif et else if en PHP ?
Avec des accolades, ils se comportent de la même façon : else if est un else dont le corps est un autre if. Avec la syntaxe à deux-points (if (...): ... endif;), seul elseif fonctionne, et else if est une erreur de syntaxe. Utiliser elseif partout évite la différence.
Comment vérifier plusieurs conditions dans un if PHP ?
Reliez-les avec && (toutes doivent être vraies) ou || (au moins une) : if ($age >= 18 && $hasTicket) { ... }. Ajoutez des parenthèses quand vous mélangez les deux, par exemple if ($isAdmin || ($isOwner && $isActive)).
Comment écrire un if sur une ligne en PHP ?
Une seule instruction peut suivre la condition sans accolades : if ($debug) echo 'debug mode';. Pour choisir entre deux valeurs sur une ligne, utilisez l'opérateur ternaire : $label = $count === 1 ? 'item' : 'items';.
Comment utiliser if else dans du HTML en PHP ?
Utilisez la syntaxe alternative, qui se lit bien entre des balises HTML : <?php if ($loggedIn): ?> <p>Welcome back</p> <?php else: ?> <a href="/login">Log in</a> <?php endif; ?>.