php нулевой или пустой?

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

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

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

7 ответов

Решение

То, что вы ищете, это:

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

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

Как показано в следующей таблице, 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   

Проверять == против ===

'' == NULL вернул бы истину
0 == NULL вернул бы истину
false == null вернул бы истину

в то время как

'' === NULL вернул бы ложь
0 === NULL вернул бы ложь
false === NULL вернул бы ложь

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

    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 или же "" даст истину.

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

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

'' == null == 0 == false

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

PHP 7: isset() против пустого () против is_null()

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

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

NULL обозначает переменную без значения. Чтобы проверить, является ли переменная NULL, вы можете использовать is_null($var) или сравнение (===) с NULL. Однако оба способа генерируют предупреждение, если переменная не определена. Похожий на isset($var) и empty($var), которые можно использовать как функции.

var_dump(is_null($var)); // true
var_dump($var === null); // true
var_dump(empty($var)); // true

Подробнее в разделе Как проверить, является ли переменная NULL в PHP?

Просто в аддон, если кто-то имеет дело с  , это сработает, если иметь дело с  .

Замени его на str_replace() сначала и проверьте это с помощью empty()

empty(str_replace(" " ,"" , $YOUR_DATA)) ? $YOUR_DATA = '--' : $YOUR_DATA;

Использование empty - http://php.net/manual/en/function.empty.php.

Пример:

$a = '';
if(empty($a)) {
    echo 'is empty';
}
Другие вопросы по тегам