Glisser

PHP : les conditions (if, else, switch et match)

PHP : conditions if, switch et match (partie 7)

Écrit par : Thibault Chazottes

if : si c’est vrai, on entre

Référence : if.

La condition entre parenthèses est convertie en booléen. Si elle vaut true, PHP exécute le bloc entre accolades. Si elle vaut false, il l’ignore.

<?php
$age = 20;

if (true) { echo 'On entre ici'; }

if ($age >= 18) { echo 'Majeur'; }

if (true) entre toujours. if (false) n’entre jamais. $age >= 18 avec $age = 20 vaut true : le code s’exécute.


else : sinon

Référence : else.

C’est soit l’un, soit l’autre. Si le if passe, on n’exécute pas le else. S’il ne passe pas, on exécute le else.

<?php
$age = 16;

if ($age >= 18) { echo 'Majeur'; } else { echo 'Mineur'; }

Ici $age >= 18 est false : on affiche Mineur.


elseif : sinon si

Référence : elseif.

On enchaîne autant de elseif qu’on veut. Le premier qui est vrai s’exécute, les suivants ne sont pas regardés. Si aucun ne passe, on tombe sur le else (s’il y en a un).

<?php
$score = 75;

if ($score >= 90) { echo 'Excellent'; } elseif ($score >= 70) { echo 'Bien'; } elseif ($score >= 50) { echo 'Moyen'; } else { echo 'Insuffisant'; }

Avec 75, on saute le premier test, on entre dans >= 70, on affiche Bien, et on s’arrête. Avec 45, aucun des if / elseif ne passe : Insuffisant.


Plusieurs conditions : && et ||

Référence : opérateurs logiques.

&& (et) : toutes les conditions doivent être vraies. Si une seule est false, le bloc n’est pas exécuté. PHP s’arrête dès la première fausse (court-circuit).

<?php
$age = 28;
$hasTicket = true;

if ($age >= 18 && $hasTicket === true) { echo 'Vous pouvez entrer'; }

|| (ou) : au moins une condition vraie suffit. Les deux vraies, ça marche aussi.

<?php
$isAdmin = false;
$isModerator = true;

if ($isAdmin || $isModerator) { echo 'Accès autorisé'; }

Ici ce n’est pas un admin, mais c’est un modérateur : on entre. Avec un && à la place, on n’entrerait pas.


Inverser : !

! veut dire non. Si $isLogged vaut false, !$isLogged vaut true. C’est le même test que $isLogged === false, souvent plus lisible.

<?php
$isLogged = false;

if (!$isLogged) { echo 'Vous devez vous connecter'; }

Référence : toujours les opérateurs logiques.


switch : une même variable, plusieurs valeurs

Une cascade if / elseif qui compare toujours la même variable, ce n’est pas le bon outil. Là, on utilise switch.

<?php
$status = 'published';

if ($status == 'draft') { echo 'Brouillon'; } elseif ($status == 'published') { echo 'Publié'; } elseif ($status == 'archived') { echo 'Archivé'; } else { echo 'Statut inconnu'; }

Équivalent, plus lisible :

<?php
$status = 'published';

switch ($status) { case 'draft': echo 'Brouillon'; break; case 'published': echo 'Publié'; break; case 'archived': echo 'Archivé'; break; default: echo 'Statut inconnu'; }

Deux mots-clés propres au switch :

  • case : « si la valeur est celle-ci ».
  • break : on a trouvé le bon cas, on sort. Sans break, PHP continue dans les case suivants (fall-through). À ne pas oublier.

default joue le rôle du else.

Dans un switch, l’expression n’est évaluée qu’une fois, puis comparée à chaque case. Un elseif réévalue à chaque test. Autre détail officiel : switch compare de façon large (==), pas stricte.

Dans un case, on peut enchaîner plusieurs instructions (un echo, un appel de fonction, un autre if…).


match : depuis PHP 8, pour retourner une valeur

Référence : match (PHP 8.0).

Si le switch ne sert qu’à attribuer ou retourner une chaîne (ou une autre valeur), match est plus court. C’est une expression : elle produit un résultat.

<?php
$status = 'published';

$label = match ($status) { 'draft' => 'Brouillon', 'published' => 'Publié', 'archived' => 'Archivé', default => 'Statut inconnu', };

echo $label;

Si dans un switch vous avez besoin d’appeler une fonction, d’écrire plusieurs lignes ou d’imbriquer un if, gardez le switch. match sert à : telle valeur → telle valeur retournée.

Comparaison stricte

match compare avec === (identité), pas ==. switch compare avec ==.

<?php
$value = '1'; // string, pas l'entier 1

echo match ($value) { 1 => 'entier 1', '1' => 'string 1', default => 'autre', }; // string 1

'1' (string) ne matche pas l’entier 1. Si $value = 1 (entier), c’est l’autre bras qui gagne.

Plusieurs valeurs pour un même résultat

Les bras peuvent lister plusieurs valeurs, séparées par une virgule (un ou) :

<?php
$role = 'moderator';

$access = match ($role) { 'admin', 'moderator' => 'Accès complet', 'tutor' => 'Accès tuteur', default => 'Accès inconnu', };

Équivalent à deux bras qui retourneraient la même chose. Moins de répétition.


Démo vidéo


FAQ rapide (SEO & technique)

Différence entre if et else ?
if s’exécute si la condition est vraie. else s’exécute seulement si elle est fausse. Voir if et else.

À quoi sert elseif ?
À enchaîner d’autres tests. Le premier vrai gagne, le reste n’est pas évalué. Voir elseif.

&& ou || ?
&& = et (tout vrai). || = ou (au moins un vrai). Voir opérateurs logiques.

Pourquoi break dans un switch ?
Sans break, PHP enchaîne les case suivants. Voir switch.

switch ou match ?
switch : plusieurs instructions par cas, comparaison large. match (PHP 8) : retourne une valeur, comparaison stricte ===. Voir match.


Conclusion

Les conditions, c’est le cœur de l’algorithmique : if / else / elseif pour les tests, && / || / ! pour les combiner, switch quand on compare une même variable à plusieurs valeurs, match depuis PHP 8 quand on veut juste retourner une valeur (avec ===).

La suite de la playlist : les tableaux (indexés et associatifs), avant les boucles. L’épisode est là : PHP : les tableaux.

Étiquettes :