PHP为空或空?
我有一个关于PHP和NULL的奇怪的问题,请看下面的代码:
$a = ''; if($a == NULL) { echo 'is null'; }
为什么我看到是空的 ? 如果$a
是空的,那是一个错误吗? 谢谢。
你在找什么是:
if($variable === NULL) {...}
PHP将NULL , false , 0和空string视为相等。
如下表所示, empty($foo)
相当于$foo==null
, is_null($foo)
与$foo===null
function相同。 该表还显示了关于null
比较的一些棘手的值。 (φ表示未初始化的variables。)
我从不使用empty()
和is_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
检查==
vs ===
'' == 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
在那里你可以看到一个空string""
与false
, 0
, NULL
或者""
会产生真实的结果。
您可能需要使用is_null
[docs] ,或者使用严格比较(第三个表格)。
这不是一个错误,但PHP的正常行为。 发生这种情况是因为PHP中的==
运算符不检查types。
'' == null == 0 == false
如果您还想检查值是否具有相同的types,请改用===
。 深入研究这种差异,请阅读正式文件 。
如果您使用==
,php会将空string或数组视为null
。 要区分null
和empty
,可以使用===
或is_null
。 所以:
if($a === NULL)
或if(is_null($a))