Dans notre projet fil rouge de création de site de recettes, on voudra afficher des informations en fonction du contexte. Par exemple :
autoriser l'auteur d'une recette à la modifier, mais pas les autres utilisateurs ;
afficher seulement la liste des recettes qui auront été vérifiées par un administrateur ;
etc.
Les conditions, c'est ce qui va réellement vous permettre de créer une application dynamique. À la fin de ce chapitre, vous aurez les bases nécessaires pour autoriser l'affichage d'une recette ou l'accès d'un utilisateur à une page selon les conditions de votre application.
Appropriez-vous la structure de base : if… else
Celle que je vais vous apprendre à utiliser maintenant est la principale à connaître. Nous en verrons d'autres un peu plus loin.
Pour apprendre à utiliser if… else
, nous allons :
D'abord voir les symboles qu'il faut connaître : vous allez devoir retenir quelques symboles qui permettent de faire des comparaisons. Soyez attentif, car ils vous seront utiles pour les conditions.
Ensuite voir comment fonctionne une condition avec
if… else
. Inutile de vous dire qu'il est indispensable de bien comprendre cela.Après, on compliquera un peu nos conditions avec les conditions multiples. Vous allez voir en effet qu'on peut utiliser plusieurs conditions à la fois.
Et enfin, l'astuce bonus : parce qu'il y a toujours un bonus pour récompenser ceux qui ont bien suivi jusqu'au bout !
Retenez les symboles à connaître
Voici les symboles que nous serons amenés à utiliser. Essayez de bien les retenir, ils vous seront utiles :
Symbole | Signification |
---|---|
=== | Est égal à |
> | Est supérieur à |
< | Est inférieur à |
>= | Est supérieur ou égal à |
<= | Est inférieur ou égal à |
!== | Est différent de |
Utilisez la structure if… else
Voici ce qu'on doit écrire, dans l'ordre, pour utiliser cette condition.
Pour introduire une condition, on utilise le mot
if
qui signifie « si », en anglais.On ajoute à la suite entre parenthèses la condition en elle-même (vous allez voir que vous pouvez inventer une infinité de conditions).
Enfin, on ouvre des accolades à l'intérieur desquelles on placera les instructions à exécuter si la condition est remplie.
Puisqu'un exemple vaut toujours mieux qu'un long discours :
<?php
$isEnabled = true; // La condition d'accès
if ($isEnabled === true) {
echo "Vous êtes autorisé(e) à accéder au site ✅";
}
?>
Ici, on demande à PHP :
Si la variable
$isEnabled
est vraie, affiche « Vous êtes autorisé(e) à accéder au site ✅ ».
Vous remarquerez que dans la quasi-totalité des cas, c'est sur une variable qu'on fait la condition.
Ce qui compte ici, c'est qu'il y a deux possibilités :
Soit la condition est remplie et alors on affiche quelque chose.
Sinon, on saute les instructions entre accolades, on ne fait rien.
Bon, on peut quand même améliorer notre exemple :
<?php
$isEnabled = true;
if ($isEnabled === true) {
echo "Vous êtes autorisé(e) à accéder au site ✅";
}
else {
echo "Accès refusé ❌ ";
}
?>
Comment marche ce code ?
Tout d'abord, j'ai mis plusieurs instructions entre accolades. Ensuite, vous avez remarqué que j'ai ajouté le mot else
(« sinon »).
Essayez ce bout de code en modifiant la valeur de $isEnabled
(sur la première ligne).
Vous allez voir que le message qui s'affiche change en fonction de la valeur que vous indiquez !
Bien entendu, vous mettez les instructions que vous voulez entre accolades.
Ici, par exemple, j'ai donné une valeur différente à la variable $isAllowedToEnter
après avoir affiché un message (une valeur qui pourrait nous servir par la suite) :
<?php
$isAllowedToEnter = "Oui";
// SI on a l'autorisation d'entrer
if ($isAllowedToEnter === "Oui") {
// instructions à exécuter quand on est autorisé à entrer
} // SINON SI on n'a pas l'autorisation d'entrer
elseif ($isAllowedToEnter === "Non") {
// instructions à exécuter quand on n'est pas autorisé à entrer
} // SINON (la variable ne contient ni Oui ni Non, on ne peut pas agir)
else {
echo "Euh, je ne comprends pas ton choix, tu peux me le rappeler s'il te plaît ?";
}
?>
Ouh là, ça commence à se compliquer un tantinet, non ?
La principale nouveauté ici, c'est le mot-clé elseif
qui signifie « sinon si ».
Dans l'ordre, PHP rencontre les conditions suivantes :
Si
$isAllowedToEnter
est égale à « Oui », tu exécutes ces instructions…Sinon, si
$isAllowedToEnter
est égale à « Non », tu exécutes ces autres instructions…Sinon, tu redemandes l'âge pour savoir si on a ou non l'autorisation d'entrer.
Étudiez le cas des booléens
Si on regarde bien le dernier code source (avec $isAllowedToEnter
), il serait plus adapté d'utiliser des booléens.
C'est quoi ça déjà ?
Les booléens sont ces variables qui valent :
soit
true
(vrai) ;soit
false
(faux).
Voici comment on teste une variable booléenne :
<?php
$isAllowedToEnter = true;
if ($isAllowedToEnter) {
echo "Bienvenue petit nouveau. :o)";
}
else {
echo "T'as pas le droit d'entrer !";
}
?>
L'un des avantages des booléens, c'est qu'ils sont particulièrement adaptés aux conditions.
Pourquoi ?
Parce qu'en fait vous n'êtes pas obligé d'ajouter le=== true
.
PHP comprend qu'il faut qu'il vérifie si $isAllowedToEnter
vaut true
.
En effet, si vous « lisez » la première ligne, ça donne :
« SI on a l'autorisation d'entrer… ».
C'est donc un raccourci à connaître quand on travaille sur des booléens.
Oui, mais ta méthode « courte » ne marche pas si on veut vérifier si le booléen vaut faux. Comment on fait avec la méthode courte, hein ?
Il y a un symbole qui permet de vérifier si la variable vaut false
: le point d'exclamation (!
).
On écrit :
<?php
$isAllowedToEnter = true;
// Si pas autorisé
if (! $isAllowedToEnter) {
}
?>
Posez des conditions multiples
Ce qu'on va essayer de faire, c'est de poser plusieurs conditions à la fois. Pour cela, on aura besoin de nouveaux mots-clés. Voici les principaux à connaître :
Mot-clé | Signification | Symbole équivalent |
---|---|---|
AND | Et | && |
OR | Ou | || |
La première colonne contient le mot-clé en anglais, la troisième son équivalent en symbole. Voici un premier exemple :
<?php
$isEnabled = true;
$isOwner = false;
if ($isEnabled && $isOwner) {
echo 'Accès à la recette validé ✅';
} else {
echo 'Accès à la recette interdit ! ❌';
}
C'est tout simple, en fait, et ça se comprend très bien : si l'utilisateur est actif et qu'il est l'auteur, il peut accéder à la recette validée. Sinon, il verra s'afficher un message de refus.
Bon allez, un dernier exemple avec||
pour que vous l'ayez vu au moins une fois, et on arrête là.
<?php
$isEnabled = true;
$isOwner = false;
$isAdmin = true;
if (($isEnabled && $isOwner) || $isAdmin) {
echo 'Accès à la recette validé ✅';
} else {
echo 'Accès à la recette interdit ! ❌';
}
Nous rajoutons une condition supplémentaire : soit la condition précédente s'applique, soit l'utilisateur concerné est un administrateur.
Utilisez cette astuce bonus
Avec les conditions, il y a une astuce à connaître.
Sachez que les deux codes ci-dessous donnent exactement le même résultat :
<?php
$chickenRecipesEnabled = true;
if ($chickenRecipesEnabled) {
echo '<h1>Liste des recettes à base de poulet</h1>';
}
?>
<?php $chickenRecipesEnabled = true; ?>
<?php if ($chickenRecipesEnabled): ?> <!-- Ne pas oublier le ":" -->
Liste des recettes à base de poulet
<?php endif; ?><!-- Ni le ";" après le endif -->
Comme vous le voyez, dans le second cas on n'a pas utilisé de echo
.
La syntaxe pour utiliser la condition diffère un peu :
Il n'y a pas d'accolade.
On ajoute
:
après la parenthèse fermante de l'instructionif
.Et il faut ajouter une instruction
endif;
.
Nous aurons d'ailleurs bientôt l'occasion de pratiquer un peu, et vous verrez que les conditions sont souvent indispensables.
Utilisez la condition switch
pour optimiser votre code
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 montrer l'intérêt de switch
! Vous allez bientôt comprendre…
Regardez cet exemple à base de if
et de elseif
:
<?php
$grade = 16;
if ($grade === 0) {
echo "Il faudra revoir tout le cours !";
}
elseif ($grade === 5) {
echo "Tu dois réviser plusieurs chapitres";
}
elseif ($grade === 7) {
echo "Il te manque quelques révisions pour atteindre la moyenne";
}
elseif ($grade === 10) {
echo "Tu as pile poil la moyenne, c'est un peu juste…";
}
elseif ($grade === 12) {
echo "Tu es assez bon";
}
elseif ($grade === 16) {
echo "Tu te débrouilles très bien !";
}
elseif ($grade === 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é) :
<?php
$grade = 10;
switch ($grade) // on indique sur quelle variable on travaille
{
case 0: // dans le cas où $grade vaut 0
echo "Il faudra revoir tout le cours !";
break;
case 5: // dans le cas où $grade vaut 5
echo "Tu dois réviser plusieurs modules";
break;
case 7: // dans le cas où $grade vaut 7
echo "Il te manque quelques révisions pour atteindre la moyenne ";
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";
}
?>
Bon alors, qu'est-ce qui est différent ?
Il y a beaucoup moins d'accolades : elles marquent seulement le début et la fin du
switch
.On indique au début du switch sur quelle variable on travaille, ici
$grade
. On dit à PHP :
Je vais analyser la valeur de
$grade
.
On utilise des
case
pour analyser chaque cas :case 0
,case 10
, etc. Cela signifie :
Dans le cas où la valeur est 0… Dans le cas où la valeur est 10…
Quel est l'avantage d'utiliser switch
?
On n'a plus besoin de mettre le triple égal !
Ah ben super, on peut l'utiliser avec les autres symboles aussi ?
Non… Cela ne marche pas avec les autres symboles :< > <= >= !==
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.
Pour empêcher cela, utilisez l'instruction break
!
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.
Découvrez les ternaires : des conditions condensées
Il existe une autre forme de condition, beaucoup moins fréquente, mais que je vous présente quand même car vous pourriez un jour ou l'autre tomber dessus. Il s'agit de ce qu'on appelle les ternaires.
Prenons cet exemple à base de if… else
qui met un booléen $majeur
à vrai ou faux selon l'âge du visiteur :
<?php
$userAge = 24;
if ($userAge >= 18) {
$isAdult = true;
}
else {
$isAdult = false;
}
?>
On peut faire la même chose en une seule ligne grâce à une structure ternaire :
<?php
$userAge = 24;
$isAdult = ($userAge >= 18) ? true : false;
// Ou mieux, dans ce cas précis
$isAdult = ($userAge >= 18);
?>
Ici, tout notre test précédent a été fait sur une seule ligne !
La condition testée est $userAge >= 18
.
Si c'est vrai, alors la valeur indiquée après le point d'interrogation (ici true
) sera affectée à la variable $isAdult
.
Sinon, c'est la valeur qui suit le symbole :
(ici false
) qui sera affectée à $isAdult
.
C'est un peu tordu, mais ça marche.
En résumé
Les conditions permettent à PHP de prendre des décisions en fonction de la valeur des variables.
La forme de condition la plus courante est
if
...elseif
...else
qui signifie « si »… « sinon si »… « sinon ».On peut combiner des conditions avec les instructions
&&
(« et ») et||
(« ou »).Si une condition comporte de nombreux
elseif
, il peut être plus pratique d'utiliser la conditionswitch
.Les ternaires sont des conditions condensées qui font un test sur une variable, et en fonction des résultats de ce test, elles donnent une valeur à une autre variable. Elles sont cependant plus rarement utilisées.
Que de notions importantes dans cette partie de mise en pratique ! Nous allons maintenant introduire le concept des boucles pour avancer sur notre projet fil rouge.