J'ai une question concernant NULL
en PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Pourquoi est-ce que je vois est nul quand $a
est une chaîne vide? Est-ce un bug?
Ce que vous recherchez, c'est:
if($variable === NULL) {...}
Notez le ===
.
Lorsque l'on utilise ==
, comme vous l'avez fait, PHP traite NULL , faux , 0 , la vide chaîne et vide tableaux égaux.
$variable
. Ce que vous voulez, c'est en fait:$variable == null
(notez le==
)== null
correspondait la chaîne vide et pas seulement null ou indéfini.$a = ''
est un videstring
,false
est un booléen,$a = 0;
est un entier etnull
est de typenull
. Ce qu'OP dit, c'est que PHP les enfilera comme "même" en valeur, mais pas comme "même" en type. Ainsi, une vérification stricte===
vérifiera également le type et échouera si vous en utilisez d'autres. C'est la raison pour laquelle vous devez être cohérent dans vos valeurs de retour. Si vous retournez normalement une chaîne dans une méthode commegetName()
, vous ne devriez pas obtenirnull
quand elle est vide, mais plus probablement une chaîne emtpy$user->getName() === ''
ou$user->getId() === 0
ou$user->isActive === false
. Comportement prévu!Comme indiqué dans le tableau suivant,
empty($foo)
est équivalent à$foo==null
etis_null($foo)
a la même fonction de$foo===null
. Le tableau montre également quelques valeurs délicates concernant lanull
comparaison. (ϕ désigne une variable non initialisée.)Je n'utilise jamais
empty()
etis_null()
fonctionne. L'utilisation d'une comparaison simple est moins ambiguë, plus rapide et plus propre. En particulier, il y aura moins de crochets bouclés à faire correspondre.par exemple
if($x==null || $y==null)
vsif(is_null($x) || is_null($y))
la source
==null
et===null
.vérifier
==
vs===
'' == NULL
reviendrait vrai0 == NULL
reviendrait vraifalse == null
reviendrait vraitandis que
'' === NULL
reviendrait faux0 === NULL
reviendrait fauxfalse === NULL
reviendrait fauxla source
Non ce n'est pas un bug. Jetez un œil aux comparaisons lâches avec le tableau == (deuxième tableau), qui montre le résultat de la comparaison de chaque valeur de la première colonne avec les valeurs des autres colonnes:
Là , vous pouvez voir qu'une chaîne vide par
""
rapport àfalse
,0
,NULL
ou""
donnera vrai.Vous voudrez peut-être utiliser
is_null
[docs] à la place, ou une comparaison stricte (troisième tableau).la source
0
cas de conversion en chaîne: codepad.org/qi40SG3E . Alors(int)"php" == 0
.Ce n'est pas un bug mais un comportement normal de PHP. Cela se produit parce que l'
==
opérateur en PHP ne vérifie pas le type.Si vous souhaitez également vérifier si les valeurs ont le même type, utilisez
===
plutôt. Pour étudier en profondeur cette différence, veuillez lire la documentation officielle .la source
Si vous utilisez
==
, php traite une chaîne ou un tableau vide commenull
. Pour faire la distinction entrenull
etempty
, utilisez===
ouis_null
. Alors:if($a === NULL)
ouif(is_null($a))
la source
PHP 7 isset () vs empty () vs is_null ()
la source
Utilisez
empty
- http://php.net/manual/en/function.empty.php .Exemple:
la source