我有一个关于NULLPHP 的问题:
  $a = '';
  if($a == NULL) {
      echo 'is null';
  }
为什么当我看到一个空字符串时为null$a?那是个错误吗?
我有一个关于NULLPHP 的问题:
  $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请注意==)