Cours 9 : Conditions et Opérateurs de Comparaison
Objectif : Maîtriser les comparaisons en PHP, comprendre la différence critique entre égalité stricte et égalité faible, et découvrir l’opérateur spaceship
<=>pour des tris élégants.
🔹 9.1 Égalité stricte (===) vs égalité faible (==)
⚠️ Le piège classique de PHP
PHP propose deux façons de comparer l’égalité, avec des comportements très différents.
| Opérateur | Nom | Comportement |
|---|---|---|
== |
Égalité faible (loose) | Convertit les types avant comparaison |
=== |
Égalité stricte | Compare valeur ET type |
🧪 Exemples concrets (à retenir !)
var_dump(0 == "0"); // true → conversion implicite
var_dump(0 === "0"); // false → types différents (int vs string)
var_dump(1 == true); // true
var_dump(1 === true); // false
var_dump("" == false); // true
var_dump("" === false); // false
var_dump("10" == "10.0"); // true
var_dump("10" === "10.0"); // false
💥 Cas dangereux :
if ($_GET['role'] == 0) { // Ce bloc s’exécute si role = "0", "00", "false", "", etc. ! }
✅ Bonne pratique absolue
Utilisez TOUJOURS
===et!==, sauf cas très rares et justifiés (ex: parsing de données brutes).
🔹 9.2 Opérateurs de comparaison classiques
PHP propose les opérateurs de comparaison standards pour les nombres, chaînes, et dates.
| Opérateur | Signification | Exemple |
|---|---|---|
< |
Strictement inférieur | 25 < 30 → true |
> |
Strictement supérieur | "Diane" > "Eva" → false (ordre alphabétique) |
<= |
Inférieur ou égal | $age <= 18 |
>= |
Supérieur ou égal | $salaire >= 2000 |
!= |
Différent (faible) | 10 != "10" → false |
!== |
Différent (strict) | 10 !== "10" → true |
💡 Cas concret : Catégorisation des membres
<?php
declare(strict_types=1);
function get_categorie_age(int $age): string
{
if ($age < 20) {
return "Junior";
} elseif ($age <= 35) {
return "Confirmé";
} else {
return "Senior";
}
}
$membres = [
'Owen' => 41, // Senior
'Diane' => 28, // Confirmé
'Sohan' => 22, // Confirmé
'Myra' => 19, // Junior
'Rosto' => 35, // Confirmé
'Eva' => 34, // Confirmé
];
foreach ($membres as $nom => $age) {
echo "$nom ($age ans) : " . get_categorie_age($age) . "\n";
}
Résultat :
Owen (41 ans) : Senior
Diane (28 ans) : Confirmé
Sohan (22 ans) : Confirmé
Myra (19 ans) : Junior
Rosto (35 ans) : Confirmé
Eva (34 ans) : Confirmé
✅ Note : les chaînes sont comparées lexicographiquement (ordre du dictionnaire).
🔹 9.3 Spaceship operator : <=> (PHP 7.0+)
L’opérateur spaceship (<=>) est un outil puissant pour les comparaisons à trois voies.
Comportement
Il retourne :
-1si la valeur de gauche est inférieure0si les valeurs sont égales1si la valeur de gauche est supérieure
var_dump(5 <=> 10); // int(-1)
var_dump(10 <=> 10); // int(0)
var_dump(15 <=> 10); // int(1)
var_dump("a" <=> "b"); // int(-1)
var_dump("z" <=> "a"); // int(1)
💡 Cas d’usage principal : tri personnalisé
$membres = [
['nom' => 'Diane', 'age' => 28],
['nom' => 'Owen', 'age' => 41],
['nom' => 'Myra', 'age' => 19],
];
// Trier par âge avec spaceship
usort($membres, fn($a, $b) => $a['age'] <=> $b['age']);
foreach ($membres as $m) {
echo "{$m['nom']} : {$m['age']} ans\n";
}
Résultat :
Myra : 19 ans
Diane : 28 ans
Owen : 41 ans
✅ Avantage : code plus lisible et plus rapide que d’écrire des conditions
if/elsedansusort.
🔁 Tri par ordre décroissant
usort($membres, fn($a, $b) => $b['age'] <=> $a['age']); // Inverser $a et $b
🔹 Bonnes pratiques résumées
| Pratique | Recommandation |
|---|---|
| Égalité | Toujours utiliser === / !== |
| Comparaisons | Privilégiez les types homogènes (comparer int avec int) |
| Spaceship | Idéal pour les tris avec usort(), uasort(), etc. |
| Chaînes vs nombres | Évitez de comparer des chaînes avec des nombres |
| Validation | Convertissez les entrées utilisateur avant comparaison |
🔹 Exercice pratique
Consigne :
Créez une fonction comparer_profils(array $profil1, array $profil2): int qui compare deux profils par âge, puis par nom en cas d’égalité.
Utilisez l’opérateur spaceship <=>.
Exemple :
$p1 = ['nom' => 'Diane', 'age' => 28];
$p2 = ['nom' => 'Eva', 'age' => 28];
$p3 = ['nom' => 'Sohan', 'age' => 22];
echo comparer_profils($p1, $p2); // → -1 (Diane < Eva)
echo comparer_profils($p1, $p3); // → 1 (28 > 22)
Indice :
return $a['age'] <=> $b['age'] ?: $a['nom'] <=> $b['nom'];
💡 L’opérateur
?:(Elvis) renvoie la première valeur non nulle.
🔹 Conclusion
Vous maîtrisez maintenant les fondations de la logique conditionnelle en PHP :
- La rigueur de l’égalité stricte (
===) - La puissance de l’opérateur spaceship (
<=>) pour les tris - Et la clarté des comparaisons explicites
🚀 Prochain module : Les Conditions
if,if…elseetif…elseif…else— apprenez à structurer votre logique métier avec des conditions robustes et lisibles.
Grâce à ces compétences, Owen, Diane, Sohan, Myra, Rosto et Eva peuvent désormais comparer, classer et décider avec précision et sécurité !
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur Cours 9 : Conditions et Opérateurs de Comparaison. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.