У меня есть странный вопрос относительно 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))