У меня есть вопрос относительно NULL
в PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Почему я вижу ноль, когда $a
является пустой строкой? Это ошибка?
У меня есть вопрос относительно NULL
в PHP:
$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
==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))
проверить ==
vs ===
'' == NULL
вернет true
0 == NULL
вернет true
false == null
вернет true
где as
'' === NULL
вернет false
0 === NULL
вернет false
false === NULL
вернет false
Нет, это не ошибка. Взгляните на Свободные сравнения с таблицей == (вторая таблица), в которой показан результат сравнения каждого значения в первом столбце со значениями в других столбцах:
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))
Используйте empty
- http://php.net/manual/en/function.empty.php.
Пример:
$a = '';
if(empty($a)) {
echo 'is empty';
}