J'ai une question concernant NULL
en PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Pourquoi est-ce que je vois est null quand $a
est une chaîne vide? Est-ce un bug?
Ce que vous cherchez, c'est:
if($variable === NULL) {...}
PHP traiteNULL, false , 0 et la chaîne empty comme égale.
Comme le montre le tableau suivant, empty($foo)
est équivalent à $foo==null
et is_null($foo)
a la même fonction que $foo===null
. Le tableau montre également certaines valeurs délicates concernant la comparaison null
. (désigne une variable non initialisée.)
Je n'utilise jamais les fonctions empty()
et is_null()
. Utiliser une simple comparaison est moins ambigu, plus rapide et plus propre.
empty is_null
==null ===null isset array_key_exists
ϕ | T | T | F | F
null | T | T | F | T
"" | T | F | T | T
[] | T | F | T | T
0 | T | F | T | T
false | T | F | T | T
true | F | F | T | T
1 | F | F | T | T
\0 | F | F | T | T
vérifier ==
vs ===
'' == NULL
retournerait vrai0 == NULL
renverrait truefalse == null
renverrait true
tandis que
'' === NULL
renverrait false0 === NULL
renverrait falsefalse === NULL
renverrait false
Non ce n'est pas un bug. Jetez un coup d'œil à la comparaisons lâches avec == table (seconde table), qui montre le résultat de la comparaison de chaque valeur de la première colonne avec les valeurs des autres colonnes:
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
Vous pouvez voir ici qu'une chaîne vide ""
comparée à false
, 0
, NULL
ou ""
donnera true.
Vous voudrez peut-être utiliser is_null
[docs] à la place, ou comparaison stricte (troisième table).
Ceci n'est pas un bug mais le comportement normal de PHP. Cela se produit parce que l'opérateur ==
dans PHP ne vérifie pas le type.
'' == null == 0 == false
Si vous souhaitez également vérifier si les valeurs ont le même type, utilisez plutôt ===
. Pour approfondir cette différence, lisez le documentation officielle .
Si vous utilisez ==
, php considère une chaîne ou un tableau vide comme étant null
. Pour faire la distinction entre null
et empty
, utilisez ===
ou is_null
. Alors:
if($a === NULL)
ou if(is_null($a))
Utilisez empty
- http://php.net/manual/en/function.empty.php .
Exemple:
$a = '';
if(empty($a)) {
echo 'is empty';
}