我有一个关于NULL
PHP 的问题:
$a = '';
if($a == NULL) {
echo 'is null';
}
为什么当我看到一个空字符串时为null$a
?那是个错误吗?
我有一个关于NULL
PHP 的问题:
$a = '';
if($a == NULL) {
echo 'is null';
}
为什么当我看到一个空字符串时为null$a
?那是个错误吗?
Answers:
您正在寻找的是:
if($variable === NULL) {...}
注意===
。
当使用use ==
时,PHP会将NULL,false,0,空字符串和空数组视为相等。
== null
要匹配空字符串,而不仅仅是空或未定义。
$a = ''
是一个空的string
,false
是一个布尔值,$a = 0;
是整数,null
是从类型null
。OP告诉我们的是,PHP将线程将它们的值作为“相同”,而不是类型的“相同”。因此,严格 ===
检查还将检查类型,如果使用其他类型则失败。这就是您应该在返回值中保持一致的原因。如果你normaly在这样的方法返回一个字符串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)
vsif(is_null($x) || is_null($y))
==null
和===null
。
检查==
与===
'' == NULL
将返回true
0 == NULL
将返回true
false == null
将返回true
在哪里
'' === 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
或""
将产生真实的。
您可能想要使用is_null
[docs]或严格比较(第三张表)。
这不是错误,而是PHP的正常行为。发生这种情况是因为==
PHP中的运算符不检查类型。
'' == null == 0 == false
如果您还想检查这些值是否具有相同的类型,请===
改用。要深入研究这种差异,请阅读官方文档。
使用empty
- http://php.net/manual/en/function.empty.php。
例:
$a = '';
if(empty($a)) {
echo 'is empty';
}
$variable
。您实际上想要的是:($variable == null
请注意==
)