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===nullfunction相同。 该表还显示了关于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))