У меня есть вопрос относительно NULLPHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Почему я вижу ноль, когда $aпустая строка? Это ошибка?
У меня есть вопрос относительно NULLPHP:
$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(обратите внимание==)