Php fondamentaux
Thème :
Junior
1 vues ·10/15 leçons

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 :

  • -1 si la valeur de gauche est inférieure
  • 0 si les valeurs sont égales
  • 1 si 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/else dans usort.

🔁 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…else et if…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.