Php пустой или пустой?

У меня есть вопрос относительно NULL в PHP:

  $a = '';
  if($a == NULL) {
      echo 'is null';
  }

Почему я вижу ноль, когда $a является пустой строкой? Это ошибка?

Ответ 1

Что вы ищете:

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

PHP обрабатывает NULL, false, 0 и пустую строку как равные.

Ответ 2

Как показано в следующей таблице, empty($foo) эквивалентно $foo==null а is_null($foo) выполняет ту же функцию, что и $foo===null. В таблице также показаны некоторые хитрые значения относительно null сравнения. (ϕ обозначает неинициализированные переменные.)

         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   

Я никогда не использую функции empty() и is_null(). Использование простого сравнения менее двусмысленно, быстрее и чище. В частности, будет меньше фигурных скобок, чтобы соответствовать.

например, if($x==null || $y==null) против if(is_null($x) || is_null($y))

Ответ 3

проверить == vs ===

'' == NULL вернет true 0 == NULL вернет true false == null вернет true

где as

'' === NULL вернет false 0 === NULL вернет false false === NULL вернет false

Ответ 4

Нет, это не ошибка. Взгляните на Свободные сравнения с таблицей == (вторая таблица), в которой показан результат сравнения каждого значения в первом столбце со значениями в других столбцах:

    TRUE    FALSE   1       0       -1      "1"     "0"     "-1"    NULL    array() "php"   ""

    [...]    

""  FALSE   TRUE    FALSE   TRUE    FALSE   FALSE   FALSE   FALSE   TRUE    FALSE   FALSE   TRUE

Здесь вы можете увидеть, что пустая строка "" по сравнению с false, 0, NULL или "" даст true.

Вместо этого вы можете использовать is_null [docs] или строгое сравнение (третья таблица).

Ответ 5

Этот не является ошибкой, но нормальным поведением PHP. Это происходит потому, что оператор == в PHP не проверяет тип.

'' == null == 0 == false

Если вы хотите также проверить, имеют ли значения один и тот же тип, используйте ===. Чтобы глубоко изучить эту разницу, прочитайте официальную документацию .

Ответ 6

Если вы используете ==, php обрабатывает пустую строку или массив как null. Чтобы сделать различие между null и empty, используйте либо ===, либо is_null. Итак:

if($a === NULL) или if(is_null($a))