web-dev-qa-db-fra.com

php est nul ou vide?

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?

162
Erin Tucker

Ce que vous cherchez, c'est:

if($variable === NULL) {...}

PHP traiteNULL, false , 0 et la chaîne empty comme égale.

289
Godwin

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   
198
PHPst

vérifier == vs === 

'' == NULL retournerait vrai
0 == NULL renverrait true
false == null renverrait true

tandis que

'' === NULL renverrait false
0 === NULL renverrait false
false === NULL renverrait false

24
jancha

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

16
Felix Kling

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 .

12
Aurelio De Rosa

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

8
dayuloli

Utilisez empty - http://php.net/manual/en/function.empty.php .

Exemple:

$a = '';
if(empty($a)) {
    echo 'is empty';
}
0
ewizard