php是null还是空?

Eri*_*ker 190 php null

NULL在PHP中有一个问题:

  $a = '';
  if($a == NULL) {
      echo 'is null';
  }
Run Code Online (Sandbox Code Playgroud)

当为空字符串时,为什么我看到为null$a?那是一个错误吗?

God*_*win 328

你在寻找的是:

if($variable === NULL) {...}
Run Code Online (Sandbox Code Playgroud)

PHP将NULL,false,0字符串视为相等.

  • 错误,你的条件只匹配未初始化和null``` $ variable```.你想要的实际上是:```$ variable == null```(注意```==```) (13认同)
  • @ThomasLAURENT,这就是OP正在寻找的东西,他们想知道为什么`== null`匹配空字符串而不仅仅是null或undefined. (6认同)
  • Oups我的错误,但你的最后一句话让我认为NULL,false,0和""**严格**等于哪个是错误的,抱歉误解. (3认同)
  • @James这是PHP中的预期行为,即使在2017年它仍然是正确的,并且我认为很长一段时间都是如此 (3认同)

PHP*_*Pst 212

如下表所示,empty($foo)相当于$foo==nullis_null($foo)具有相同的功能$foo===null.该表还显示了有关null比较的一些棘手的值.(φ表示未初始化的变量.)

我从不使用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   
Run Code Online (Sandbox Code Playgroud)

  • 表中缺少"0"和"0.0".他们让事情变得非常棘手,尤其是空洞().这就是我避免使用empty()的原因. (2认同)

jan*_*cha 27

检查==vs===

'' == NULL将返回true
0 == NULL将返回true
false == null将返回true

在哪里

'' === NULL会返回false
0 === NULL会返回false
false === NULL会返回false


Fel*_*ing 17

不,这不是一个错误.看看与== table(第二个表)的松散比较,它显示了将第一列中的每个值与其他列中的值进行比较的结果:

    TRUE    FALSE   1       0       -1      "1"     "0"     "-1"    NULL    array() "php"   ""

    [...]    

""  FALSE   TRUE    FALSE   TRUE    FALSE   FALSE   FALSE   FALSE   TRUE    FALSE   FALSE   TRUE
Run Code Online (Sandbox Code Playgroud)

在那里,你可以看到一个空字符串""相比false,0,NULL""将产生真实的.

您可能希望使用is_null [docs]或严格比较(第三个表).


Aur*_*osa 12

不是一个错误,而是PHP的正常行为.这是因为==PHP中的运算符不检查类型.

'' == null == 0 == false
Run Code Online (Sandbox Code Playgroud)

如果您还想检查值是否具有相同的类型,请===改用.要深入研究这种差异,请阅读官方文档.


Fou*_*SSI 9

PHP 7 isset() vs empty() vs is_null()

在此处输入图片说明


day*_*oli 8

如果你使用==,php会将空字符串或数组视为null.区分nullempty,使用===is_null.所以:

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