PHP为空或空?

我有一个关于PHP和NULL的奇怪的问题,请看下面的代码:

$a = ''; if($a == NULL) { echo 'is null'; } 

为什么我看到是空的 ? 如果$a是空的,那是一个错误吗? 谢谢。

你在找什么是:

 if($variable === NULL) {...} 

PHP将NULLfalse0string视为相等。

如下表所示, empty($foo)相当于$foo==nullis_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""false0NULL或者""会产生真实的结果。

您可能需要使用is_null [docs] ,或者使用严格比较(第三个表格)。

不是一个错误,但PHP的正常行为。 发生这种情况是因为PHP中的==运算符不检查types。

 '' == null == 0 == false 

如果您还想检查值是否具有相同的types,请改用=== 。 深入研究这种差异,请阅读正式文件 。

如果您使用== ,php会将空string或数组视为null 。 要区分nullempty ,可以使用===is_null 。 所以:

if($a === NULL)if(is_null($a))