Comparer des valeurs avec les opérateurs de comparaison
Objectif de la leçon
Continuer dans le même fichier index.php avec les variables et les calculs du fil rouge, comprendre qu’une comparaison produit un booléen, utiliser les opérateurs ===, !==, <, >, <= et >=, distinguer attribution et comparaison, puis préparer directement les premières conditions PHP.
Explications
Avant de commencer
Dans la leçon précédente, nous avons commencé à manipuler les valeurs avec des opérateurs.
Le dossier du fil rouge contient toujours notamment :
index.html
index.php
apropos.html
contact.html
ordinateur.jpg
styles.css
Au début de :
index.php
nous pouvons maintenant avoir :
<?php
$nomSite = 'Mon premier site HTML';
$nombrePages = 3;
$pagesConvertiesPhp = 1;
$pagesRestantes = $nombrePages - $pagesConvertiesPhp;
$messageAccueil = 'Le site possède ' . $nombrePages . ' pages principales et il reste ' . $pagesRestantes . ' pages à faire évoluer vers PHP.';
$formulaireTraite = false;
$dernierMessage = null;
?>
Nous avons appris à :
- effectuer des opérations numériques ;
- construire une expression ;
- concaténer du texte ;
- stocker le résultat d’une expression dans une variable.
Nous allons maintenant découvrir un autre type d’expression :
la comparaison
Une comparaison ne produit pas un nouveau texte ou un nouveau nombre.
Elle produit :
true
ou :
false
Dans cette leçon, nous allons répondre à quatre questions :
- Qu’est-ce qu’une comparaison ?
- Comment vérifier si deux valeurs sont identiques ou différentes ?
- Comment comparer deux nombres ?
- Pourquoi devons-nous comprendre les comparaisons avant d’écrire nos premières conditions ?
À la fin de cette leçon, notre fichier
index.php contiendra plusieurs booléens calculés à partir de l’état réel du projet.
1. Qu’est-ce qu’une comparaison ?
Une comparaison permet de poser une question à propos de deux valeurs.
Par exemple :
3 est-il supérieur à 1 ?
PHP évalue cette question et produit :
true
Autre exemple :
3 est-il inférieur à 1 ?
Cette fois, PHP produit :
false
Nous retrouvons donc directement le type :
bool
étudié dans le chapitre précédent.
2. Une comparaison est une expression
Nous avons déjà retenu :
expression
= code qui produit une valeur
Une comparaison est donc une expression.
Par exemple :
$pagesRestantes === 0
produit soit :
true
soit :
false
Nous pouvons ensuite stocker ce résultat dans une variable.
3. Revenir sur le signe =
Nous connaissons déjà :
=
Dans :
$nombrePages = 3;
ce signe réalise une attribution.
Nous pouvons lire :
attribuer la valeur 3 à $nombrePages
Il ne s’agit pas d’une comparaison.
Cette distinction est importante avant d’aller plus loin.
4. Découvrir l’égalité stricte avec ===
Pour vérifier que deux valeurs sont identiques, nous allons utiliser :
===
Cet opérateur vérifie :
- la valeur ;
- le type.
Par exemple :
3 === 3
produit :
true
Les deux valeurs sont des entiers et valent toutes les deux
3.
5. Utiliser === dans le fil rouge
Nous avons :
$nombrePages = 3;
Nous pouvons tester temporairement :
$nombrePagesCorrect = $nombrePages === 3;
La comparaison produit :
true
La variable :
$nombrePagesCorrect
contient donc un booléen.
6. Vérifier le résultat avec var_dump()
Ajoutez temporairement :
var_dump($nombrePagesCorrect);
Vous devez observer :
bool(true)
selon la présentation produite par PHP.
Supprimez ensuite :
var_dump($nombrePagesCorrect);
et la variable de test :
$nombrePagesCorrect
Nous ne la conserverons pas dans l’état final.
7. Pourquoi utiliser === plutôt que == dans ce cours ?
PHP possède aussi :
==
Cet opérateur compare les valeurs en pouvant effectuer certaines conversions de type.
Comparez :
3 == '3'
et :
3 === '3'
Dans la première comparaison, PHP peut considérer les deux valeurs comme égales après conversion.
Dans la seconde :
3
est un
int,
alors que :
'3'
est un
string.
La comparaison stricte produit donc :
false
Pour garder un raisonnement clair, nous privilégierons généralement les comparaisons strictes dans ce cours.
8. Découvrir !==
L’opérateur :
!==
signifie :
n’est pas strictement identique à
Par exemple :
3 !== 2
produit :
true
Dans notre projet :
$pagesRestantes = 2;
Nous pouvons donc écrire :
$ilResteDesPages = $pagesRestantes !== 0;
Le résultat actuel est :
true
9. Donner un nom compréhensible à un booléen
Le nom :
$ilResteDesPages
décrit directement la question représentée.
Lorsque sa valeur est :
true
nous pouvons lire :
oui, il reste des pages
Lorsqu’elle sera :
false
nous pourrons lire :
non, il ne reste plus de page
Nous conserverons cette habitude pour les variables booléennes.
10. Découvrir l’opérateur >
L’opérateur :
>
signifie :
supérieur à
Nous avons :
$pagesConvertiesPhp = 1;
Nous pouvons écrire :
$progressionCommencee = $pagesConvertiesPhp > 0;
Comme :
1 > 0
est vrai,
la variable contient :
true
11. Découvrir l’opérateur <
L’opérateur :
<
signifie :
inférieur à
Testez temporairement :
$moinsDeCinqPages = $nombrePages < 5;
Avec :
$nombrePages = 3;
la comparaison produit :
true
Supprimez ensuite cette variable de test.
12. Découvrir <=
L’opérateur :
<=
signifie :
inférieur ou égal à
Par exemple :
3 <= 3
produit :
true
et :
2 <= 3
produit également :
true
L’égalité est donc acceptée.
13. Découvrir >=
L’opérateur :
>=
signifie :
supérieur ou égal à
Dans notre projet :
$pagesConvertiesPhp = 1;
Nous pouvons écrire :
$auMoinsUnePageConvertie = $pagesConvertiesPhp >= 1;
Le résultat est :
true
14. Vérifier si la conversion est terminée
Nous voulons maintenant une information vraiment utile pour la suite du fil rouge.
Nous avons :
$pagesRestantes = 2;
Nous pouvons créer :
$conversionTerminee = $pagesRestantes === 0;
Comme :
2 === 0
est faux,
la variable :
$conversionTerminee
contient :
false
15. Vérifier l’état du formulaire
Nous avons toujours :
$formulaireTraite = false;
Nous pouvons créer :
$formulaireEnAttente = $formulaireTraite === false;
La comparaison produit actuellement :
true
Nous pouvons lire :
oui, le formulaire est encore en attente
16. Comparer null strictement
Nous avons aussi :
$dernierMessage = null;
Nous pouvons créer :
$aucunMessage = $dernierMessage === null;
Cette comparaison produit :
true
Nous vérifions précisément la valeur :
null
et non une chaîne vide ou une autre valeur.
17. Observer les booléens
Pour vérifier les résultats, testez temporairement :
var_dump($progressionCommencee);
var_dump($conversionTerminee);
var_dump($formulaireEnAttente);
var_dump($aucunMessage);
Avec l’état actuel du projet, vous devez obtenir :
$progressionCommencee
= true
$conversionTerminee
= false
$formulaireEnAttente
= true
$aucunMessage
= true
Supprimez ensuite les appels à
var_dump().
18. Une comparaison ne modifie pas les valeurs
Lorsque nous écrivons :
$pagesRestantes === 0
nous ne modifions pas :
$pagesRestantes
La variable continue à contenir :
2
Nous posons seulement une question sur sa valeur.
19. Comparer = et ===
Comparez :
$pagesRestantes = 0;
et :
$pagesRestantes === 0
La première instruction :
$pagesRestantes = 0;
attribue une nouvelle valeur.
Elle modifie la variable.
La seconde expression :
$pagesRestantes === 0
compare la valeur actuelle à
0.
Elle produit un booléen sans modifier la variable.
Retenez :
=
= attribution
===
= comparaison stricte
20. Pourquoi ne pas afficher directement les booléens ?
Nous pourrions écrire :
echo $conversionTerminee;
Mais un booléen n’est pas un message destiné au visiteur.
Notre objectif est de l’utiliser pour prendre une décision.
Par exemple :
si $conversionTerminee vaut true,
afficher un message de fin
sinon,
afficher un message de progression
Nous n’écrivons pas encore cette condition.
Nous la préparons.
21. Nous préparons la prochaine leçon
La variable :
$conversionTerminee
vaut actuellement :
false
Nous pouvons déjà imaginer deux phrases :
La conversion PHP du site est terminée.
La conversion PHP du site est encore en cours.
Dans la prochaine leçon, nous demanderons à PHP de choisir lui-même la bonne phrase selon la valeur du booléen.
22. Le formulaire prépare une seconde décision
Nous avons aussi :
$formulaireEnAttente = true;
Plus tard, cette valeur pourra permettre de choisir un comportement différent lorsque le formulaire aura réellement été traité.
Nous ne traitons toujours pas :
contact.html
dans cette leçon.
Nous utilisons seulement l’état déjà connu du projet.
23. État final du bloc PHP
À la fin de la leçon, le début de :
index.php
peut être :
<?php
$nomSite = 'Mon premier site HTML';
$nombrePages = 3;
$pagesConvertiesPhp = 1;
$pagesRestantes = $nombrePages - $pagesConvertiesPhp;
$messageAccueil = 'Le site possède ' . $nombrePages . ' pages principales et il reste ' . $pagesRestantes . ' pages à faire évoluer vers PHP.';
$progressionCommencee = $pagesConvertiesPhp > 0;
$conversionTerminee = $pagesRestantes === 0;
$formulaireTraite = false;
$formulaireEnAttente = $formulaireTraite === false;
$dernierMessage = null;
$aucunMessage = $dernierMessage === null;
?>
Nous avons maintenant plusieurs booléens calculés à partir des vraies valeurs du projet.
24. Lire les booléens comme des questions
Nous pouvons lire :
$progressionCommencee
= avons-nous déjà commencé la conversion PHP ?
$conversionTerminee
= reste-t-il zéro page à convertir ?
$formulaireEnAttente
= le formulaire est-il encore non traité ?
$aucunMessage
= aucun message n’est-il disponible ?
Chaque variable représente le résultat d’une question logique.
25. Comparaison et décision sont deux étapes différentes
Cette distinction est importante.
Dans cette leçon :
comparaison
= produire true ou false
Dans la prochaine leçon :
condition
= choisir quoi exécuter selon true ou false
Nous apprenons donc la question avant d’apprendre la décision.
26. Ce que nous n’avons pas encore étudié
Nous ne savons pas encore dire à PHP :
si cette valeur est vraie,
exécute ce bloc
sinon,
exécute un autre bloc
La première structure que nous allons apprendre pour cela est :
if
Puis nous ajouterons :
else
Nous ne passerons pas à des formes plus complexes avant d’avoir compris ces deux bases.
27. Ce que vous devez comprendre avant la prochaine leçon
Vous devez maintenant être capable d’expliquer :
- ce qu’est une comparaison ;
- pourquoi une comparaison produit un
bool ;
- ce que vérifie
=== ;
- pourquoi
3 === '3'produit
false ;
- le rôle de
!== ;
- le rôle de
> ;
- le rôle de
< ;
- le rôle de
>= ;
- le rôle de
<= ;
- la différence entre
=et
=== ;
- pourquoi une comparaison ne modifie pas les valeurs comparées ;
- pourquoi nous donnons des noms clairs aux variables booléennes ;
- comment
$conversionTerminee prépare une condition.
Retenez surtout :
=
= attribuer une valeur
===
= comparer strictement valeur et type
comparaison
= produire true ou false
Dans la prochaine leçon, nous garderons exactement cet état du projet et nous écrirons nos premières conditions avec
ifet
else.
Exemple commenté
Reprenons les valeurs du fil rouge :
$nombrePages = 3;
$pagesConvertiesPhp = 1;
$pagesRestantes = $nombrePages - $pagesConvertiesPhp;
Nous pouvons calculer :
$progressionCommencee = $pagesConvertiesPhp > 0;
$conversionTerminee = $pagesRestantes === 0;
Avec les valeurs actuelles :
$progressionCommencee
= true
$conversionTerminee
= false
Nous pouvons également vérifier les états déjà présents :
$formulaireEnAttente = $formulaireTraite === false;
$aucunMessage = $dernierMessage === null;
Ces comparaisons produisent des booléens qui pourront être utilisés dans les premières conditions de la prochaine leçon.
Exercice à réaliser
Continuez dans le même fichier :
index.php
1. Vérifier l’état existant
Vous devez avoir notamment :
$nombrePages = 3;
$pagesConvertiesPhp = 1;
$pagesRestantes = $nombrePages - $pagesConvertiesPhp;
$formulaireTraite = false;
$dernierMessage = null;
2. Tester une égalité stricte
Ajoutez temporairement :
$nombrePagesCorrect = $nombrePages === 3;
Vérifiez avec :
var_dump($nombrePagesCorrect);
Puis supprimez cette variable de test.
3. Créer progressionCommencee
Ajoutez :
$progressionCommencee = $pagesConvertiesPhp > 0;
4. Créer conversionTerminee
Ajoutez :
$conversionTerminee = $pagesRestantes === 0;
5. Créer formulaireEnAttente
Ajoutez :
$formulaireEnAttente = $formulaireTraite === false;
6. Créer aucunMessage
Ajoutez :
$aucunMessage = $dernierMessage === null;
7. Observer les quatre booléens
Testez temporairement :
var_dump($progressionCommencee);
var_dump($conversionTerminee);
var_dump($formulaireEnAttente);
var_dump($aucunMessage);
Puis retirez les appels à
var_dump().
8. Comparer = et ===
Expliquez pourquoi :
$pagesRestantes = 0;
modifierait la variable,
alors que :
$pagesRestantes === 0
produit seulement un booléen.
9. Expliquer ce que vous avez fait
Sans regarder la correction, expliquez avec vos propres mots :
1. ce qu’est une comparaison ;
2. ce qu’elle produit ;
3. pourquoi
=== est une comparaison stricte ;
4. ce que signifie
> ;
5. ce que signifie
!== ;
6. la différence entre
=et
=== ;
7. pourquoi
$conversionTermineeprépare directement la prochaine leçon.
Correction et résultat attendu
À la fin de l’exercice, le début de :
index.php
peut être :
<?php
$nomSite = 'Mon premier site HTML';
$nombrePages = 3;
$pagesConvertiesPhp = 1;
$pagesRestantes = $nombrePages - $pagesConvertiesPhp;
$messageAccueil = 'Le site possède ' . $nombrePages . ' pages principales et il reste ' . $pagesRestantes . ' pages à faire évoluer vers PHP.';
$progressionCommencee = $pagesConvertiesPhp > 0;
$conversionTerminee = $pagesRestantes === 0;
$formulaireTraite = false;
$formulaireEnAttente = $formulaireTraite === false;
$dernierMessage = null;
$aucunMessage = $dernierMessage === null;
?>
Les expressions :
$pagesConvertiesPhp > 0
$pagesRestantes === 0
$formulaireTraite === false
$dernierMessage === null
produisent toutes des booléens.
Avec l’état actuel du projet :
$progressionCommencee
= true
$conversionTerminee
= false
$formulaireEnAttente
= true
$aucunMessage
= true
Nous avons également distingué :
=
= attribution
===
= comparaison stricte
Dans la prochaine leçon, nous utiliserons
$conversionTermineedans une première structure
if, puis nous ajouterons
else.
À retenir
Dans cette leçon, nous avons appris à comparer des valeurs.
Une comparaison est une expression qui produit :
true
ou :
false
Nous avons découvert :
===
= strictement identique
!==
= strictement différent
>
= supérieur à
<
= inférieur à
>=
= supérieur ou égal à
<=
= inférieur ou égal à
Nous avons privilégié les comparaisons strictes pour l’égalité afin de tenir compte à la fois de la valeur et du type.
Dans le fil rouge, nous avons maintenant notamment :
$progressionCommencee = $pagesConvertiesPhp > 0;
$conversionTerminee = $pagesRestantes === 0;
$formulaireEnAttente = $formulaireTraite === false;
$aucunMessage = $dernierMessage === null;
Nous avons aussi retenu une distinction essentielle :
=
= attribuer
===
= comparer
Ces booléens préparent directement les premières conditions.
Dans la prochaine leçon, nous utiliserons
ifpuis
elsepour demander à PHP d’exécuter un bloc différent selon qu’une comparaison produit
trueou
false.
Seuil de réussite, en pourcentage : 100 %. QCM obligatoire pour terminer le cours.