PHP == vs === : différence et importance expliquées

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Le piège qui attrape tous les débutants

\n\n

Imaginez la situation : vous écrivez votre premier script PHP, vous vérifiez si l'utilisateur a saisi le bon mot de passe, et vous utilisez la condition if ($password == "secret"). Tout fonctionne parfaitement. Mais un mois plus tard, vous remarquez un comportement étrange : if (0 == "off") retourne true, alors que ce sont deux choses complètement différentes. Vous voyez le problème ?

\n\n

Bienvenue dans le monde des opérateurs de comparaison PHP. Ici, le double égal (==) et le triple égal (===) ne sont pas de simples symboles différents, mais deux approches de comparaison radicalement distinctes. Si vous ne comprenez pas la différence, votre code peut se comporter de manière imprévisible, et les bugs se cacheront là où vous les attendez le moins.

\n\n

Dans cet article, nous allons voir :

\n
    \n
  • Comment chaque opérateur fonctionne « en interne »
  • \n
  • Pourquoi "123abc" == 123 est true, alors que "123abc" === 123 est false
  • \n
  • Quels pièges vous guettent (spoiler : ils sont nombreux)
  • \n
  • Quand utiliser quel opérateur dans des projets réels
  • \n
\n\n

Prêt ? C'est parti !

\n\n

1. Les bases : Que sont == et === en PHP ?

\n\n

Les deux opérateurs servent à comparer deux valeurs. Mais leur approche est fondamentalement différente.

\n\n

L'opérateur d'égalité (==) — « conversion de type autorisée »

\n

Le double égal (ou comparaison non stricte) convertit d'abord les deux opérandes vers un type commun, puis compare leurs valeurs. Si les types sont différents, PHP les convertit automatiquement. C'est pratique, mais dangereux.

\n\n

L'opérateur d'identité (===) — « tout doit correspondre »

\n

Le triple égal (ou comparaison stricte) compare à la fois les valeurs et les types de données. Si les types sont différents, le résultat est immédiatement false, sans aucune conversion.

\n\n

Voici un tableau simple pour retenir la différence :

\n
    \n
  • $a == $b — les valeurs sont-elles égales après conversion de type ?
  • \n
  • $a === $b — les valeurs sont-elles égales et les types sont-ils identiques ?
  • \n
\n\n

2. Exemple simple : nombres et chaînes de caractères

\n\n

Regardons un cas classique : la comparaison d'un nombre et d'une chaîne de caractères.

\n\n
<?php\n$a = 5;      // integer\n$b = "5";   // string\n\n// Comparaison non stricte (==)\nvar_dump($a == $b);  // bool(true) — PHP convertit la chaîne "5" en nombre 5\n\n// Comparaison stricte (===)\nvar_dump($a === $b); // bool(false) — les types sont différents : integer vs string\n?>
\n\n

Dans le premier cas, PHP se dit : « Tiens, un nombre et une chaîne. La chaîne "5" peut facilement être convertie en nombre 5, donc ils sont égaux ». Dans le second cas : « Non, integer n'est pas string, c'est false immédiatement ».

\n\n

Ça semble être un détail, mais c'est là que les problèmes commencent.

\n\n

3. Le piège principal : « Vide » et « zéro »

\n\n

L'erreur la plus fréquente chez les débutants concerne les valeurs fausses. En PHP, plusieurs valeurs sont considérées comme égales lors d'une comparaison non stricte, alors qu'elles sont totalement différentes sur le fond.

\n\n

Regardez ce code :

\n\n
<?php\nvar_dump(0 == false);  // bool(true)  — zéro est égal à false\nvar_dump(0 == null);   // bool(true)  — zéro est égal à null\nvar_dump(false == null); // bool(true)  — false est égal à null\nvar_dump("" == false); // bool(true)  — chaîne vide est égale à false\nvar_dump("" == 0);     // bool(true)  — chaîne vide est égale à zéro\n?>
\n\n

Choquant, non ? 0 == false est true, "" == 0 est aussi true. Si vous vérifiez si l'utilisateur a saisi un mot de passe et écrivez if ($password == ""), puis comparez avec if ($password == 0), les deux conditions peuvent se déclencher de la même manière, alors qu'il s'agit de scénarios différents.

\n\n

Comparez maintenant avec le triple égal :

\n\n
<?php\nvar_dump(0 === false);  // bool(false)\nvar_dump(0 === null);   // bool(false)\nvar_dump("" === false); // bool(false)\nvar_dump("" === 0);     // bool(false)\n?>

Blogs

Book Recommendations