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