У меня есть странный вопрос относительно PHP и NULL , см. Следующий код:
$a = ''; if($a == NULL) { echo 'is null'; }
Почему я вижу нулевое значение ? если $a пуст !, это ошибка? Спасибо.
Что вы ищете:
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
check == vs ===
'' == NULL вернет true
0 == NULL вернет true
false == null вернет true
в то время как
'' === NULL вернет false
0 === NULL вернет false
false === NULL вернет false
Нет, это не ошибка. Посмотрите на сравнение 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 или "" даст true.
Вместо этого вы можете использовать is_null [docs] или строгое сравнение (третья таблица).
Это не ошибка, а нормальное поведение PHP. Это происходит потому, что оператор == в PHP не проверяет тип.
'' == null == 0 == false
Если вы хотите также проверить, имеют ли значения одинаковый тип, используйте === вместо этого. Чтобы глубоко изучить эту разницу, прочитайте официальную документацию .
Если вы используете == , php обрабатывает пустую строку или массив как null . Чтобы сделать различие между null и empty , используйте === или is_null . Так:
if($a === NULL) или if(is_null($a))