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

У меня есть странный вопрос о PHP и NULL, см. следующий код:

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

Почему я вижу, что имеет значение null? если $a пусто!, это ошибка? Спасибо.

4b9b3361 купить аттестат

Что вы ищете:

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

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

234
ответ дан 23 нояб. '11 в 4:47
источник

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

Я никогда не использую функции empty() и is_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   
171
ответ дан 25 марта '13 в 7:18
источник

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

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

где as

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

18
ответ дан 23 нояб. '11 в 4:49
источник

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

    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] или строгое сравнение (третья таблица).

15
ответ дан 23 нояб. '11 в 4:48
источник

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

'' == null == 0 == false

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

11
ответ дан 23 нояб. '11 в 4:48
источник

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

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

5
ответ дан 17 июня '13 в 12:32
источник