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 chaîne de caractères, alors que 42 est un entier. false est bool alors que "false" est une chaîne de caractères.

Note:

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().

Note:

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.

Note:

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).

Comparaisons de $x avec des fonctions PHP
Expressiongettype()empty()is_null()isset()bool : if($x)
$x = "";chaîne de caractèrestruefalsetruefalse
$x = null;NULLtruetruefalsefalse
var $x;NULLtruetruefalsefalse
$x est indéfiniNULLtruetruefalsefalse
$x = [];arraytruefalsetruefalse
$x = ['a', 'b'];arrayfalsefalsetruetrue
$x = false;booltruefalsetruefalse
$x = true;boolfalsefalsetruetrue
$x = 1;entierfalsefalsetruetrue
$x = 42;entierfalsefalsetruetrue
$x = 0;entiertruefalsetruefalse
$x = -1;entierfalsefalsetruetrue
$x = "1";chaîne de caractèresfalsefalsetruetrue
$x = "0";chaîne de caractèrestruefalsetruefalse
$x = "-1";chaîne de caractèresfalsefalsetruetrue
$x = "php";chaîne de caractèresfalsefalsetruetrue
$x = "true";chaîne de caractèresfalsefalsetruetrue
$x = "false";stringfalsefalsetruetrue

Comparaison large avec ==
truefalse10-1"1""0""-1"null[]"php"""
truetruefalsetruefalsetruetruefalsetruefalsefalsetruefalse
falsefalsetruefalsetruefalsefalsetruefalsetruetruefalsetrue
1truefalsetruefalsefalsetruefalsefalsefalsefalsefalsefalse
0falsetruefalsetruefalsefalsetruefalsetruefalsefalse*false*
-1truefalsefalsefalsetruefalsefalsetruefalsefalsefalsefalse
"1"truefalsetruefalsefalsetruefalsefalsefalsefalsefalsefalse
"0"falsetruefalsetruefalsefalsetruefalsefalsefalsefalsefalse
"-1"truefalsefalsefalsetruefalsefalsetruefalsefalsefalsefalse
nullfalsetruefalsetruefalsefalsefalsefalsetruetruefalsetrue
[]falsetruefalsefalsefalsefalsefalsefalsetruetruefalsefalse
"php"truefalsefalsefalse*falsefalsefalsefalsefalsefalsetruefalse
""falsetruefalsefalse*falsefalsefalsefalsetruefalsefalsetrue
* true antérieur à PHP 8.0.0.

Comparaison stricte avec ===
truefalse10-1"1""0""-1"null[]"php"""
truetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse
falsefalsetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse
1falsefalsetruefalsefalsefalsefalsefalsefalsefalsefalsefalse
0falsefalsefalsetruefalsefalsefalsefalsefalsefalsefalsefalse
-1falsefalsefalsefalsetruefalsefalsefalsefalsefalsefalsefalse
"1"falsefalsefalsefalsefalsetruefalsefalsefalsefalsefalsefalse
"0"falsefalsefalsefalsefalsefalsetruefalsefalsefalsefalsefalse
"-1"falsefalsefalsefalsefalsefalsefalsetruefalsefalsefalsefalse
nullfalsefalsefalsefalsefalsefalsefalsefalsetruefalsefalsefalse
[]falsefalsefalsefalsefalsefalsefalsefalsefalsetruefalsefalse
"php"falsefalsefalsefalsefalsefalsefalsefalsefalsefalsetruefalse
""falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetrue
To Top