У меня есть вопрос относительно 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 , пустую строку и пустые массивы как равные.
== null
сопоставляется пустая строка, а не просто ноль или неопределенное значение.
$a = ''
является пустым string
, false
является логическим, $a = 0;
является целым числом и null
от типа null
. OP говорит о том, что PHP будет обрабатывать их как «одинаковые» по значению, но не как «одинаковые» по типу. Поэтому строгая ===
проверка также проверит тип и потерпит неудачу, если вы используете разные. Вот почему вы должны быть последовательны в ваших возвращаемых значениях. Если вы обычно возвращаете строку в таком методе, как getName()
, вы не должны получать, null
когда она пустая, но, скорее, строку emtpy $user->getName() === ''
или $user->getId() === 0
или $user->isActive === false
. Намеренное поведение!
Как показано в следующей таблице, 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))
==null
и ===null
.
проверить ==
против===
'' == NULL
вернул
0 == NULL
бы true
false == null
вернул бы true вернул бы true
в то время как
'' === 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
[документы] или строгое сравнение (третья таблица).
0
при преобразовании в строку: codepad.org/qi40SG3E . Так (int)"php" == 0
.
Это не ошибка, а нормальное поведение PHP. Это происходит потому, что ==
оператор в PHP не проверяет тип.
'' == null == 0 == false
Если вы также хотите проверить, имеют ли значения одинаковый тип, используйте ===
вместо этого. Чтобы глубоко изучить эту разницу, пожалуйста, прочитайте официальную документацию .
Используйте empty
- http://php.net/manual/en/function.empty.php .
Пример:
$a = '';
if(empty($a)) {
echo 'is empty';
}
$variable
. То, что вы хотите на самом деле:$variable == null
(обратите внимание==
)