Comparaison de types en PHP
La table suivante résume les différents comportements de PHP
avec les types et
opérateurs de comparaison,
stricte ou large. Cette table est aussi reliée au
transtypage.
Elle a été inspirée par différents commentaires d'utilisateurs,
et par le travail fait chez BlueShoes.
Avant d'utiliser ces tables, il est important de comprendre les types
et leur signification. Par exemple, "42" est une
&string;, alors que 42 est un
&integer;. &false; est bool alors que
"false" est une &string;.
Les formulaires HTML ne connaissent pas les entiers, nombres à virgules
et autres booléens. Pour savoir si une structure est un entier, utilisez
is_numeric.
La ligne if ($x) génère une erreur de niveau
E_NOTICE lorsque $x est
indéfini. Alternativement, utilisez plutôt les fonctions
empty ou isset, ou encore,
initialisez toutes vos variables.
Des opérations numériques peuvent donner une valeur représentée par la
constante NAN. Toutes les comparaisons de cette valeur
avec une autre valeur, y compris cette même valeur, à l'exception de &true;
auront comme résultat &false;
(i.e. NAN != NAN et NAN !== NAN).
Exemples d'opérations qui produisent la valeur NAN :
sqrt(-1), asin(2), et
acosh(0).
Comparaison large avec ==&true;&false;10-1"1""0""-1"&null;[]"php"""&true;&true;&false;&true;&false;&true;&true;&false;&true;&false;&false;&true;&false;&false;&false;&true;&false;&true;&false;&false;&true;&false;&true;&true;&false;&true;1&true;&false;&true;&false;&false;&true;&false;&false;&false;&false;&false;&false;0&false;&true;&false;&true;&false;&false;&true;&false;&true;&false;&false;*&false;*-1&true;&false;&false;&false;&true;&false;&false;&true;&false;&false;&false;&false;"1"&true;&false;&true;&false;&false;&true;&false;&false;&false;&false;&false;&false;"0"&false;&true;&false;&true;&false;&false;&true;&false;&false;&false;&false;&false;"-1"&true;&false;&false;&false;&true;&false;&false;&true;&false;&false;&false;&false;&null;&false;&true;&false;&true;&false;&false;&false;&false;&true;&true;&false;&true;[]&false;&true;&false;&false;&false;&false;&false;&false;&true;&true;&false;&false;"php"&true;&false;&false;&false;*&false;&false;&false;&false;&false;&false;&true;&false;""&false;&true;&false;&false;*&false;&false;&false;&false;&true;&false;&false;&true;
* &true; antérieur à PHP 8.0.0.
Comparaison stricte avec ===&true;&false;10-1"1""0""-1"&null;[]"php"""&true;&true;&false;&false;&false;&false;&false;&false;&false;&false;&false;&false;&false;&false;&false;&true;&false;&false;&false;&false;&false;&false;&false;&false;&false;&false;1&false;&false;&true;&false;&false;&false;&false;&false;&false;&false;&false;&false;0&false;&false;&false;&true;&false;&false;&false;&false;&false;&false;&false;&false;-1&false;&false;&false;&false;&true;&false;&false;&false;&false;&false;&false;&false;"1"&false;&false;&false;&false;&false;&true;&false;&false;&false;&false;&false;&false;"0"&false;&false;&false;&false;&false;&false;&true;&false;&false;&false;&false;&false;"-1"&false;&false;&false;&false;&false;&false;&false;&true;&false;&false;&false;&false;&null;&false;&false;&false;&false;&false;&false;&false;&false;&true;&false;&false;&false;[]&false;&false;&false;&false;&false;&false;&false;&false;&false;&true;&false;&false;"php"&false;&false;&false;&false;&false;&false;&false;&false;&false;&false;&true;&false;""&false;&false;&false;&false;&false;&false;&false;&false;&false;&false;&false;&true;