У меня есть вопрос относительно 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';
}