检测一个值是否为 null 或 false

使用 === 操作符来检测 null 和布尔 false 值。

PHP 宽松的类型系统提供了许多不同的方法来检测一个变量的值。
然而这也造成了很多问题。
使用 == 来检测一个值是否为 null 或 false,如果该值实际上是一个空字符串或 0,也会误报为 false。
isset 是检测一个变量是否有值,
而不是检测该值是否为 null 或 false,因此在这里使用是不恰当的。

is_null() 函数能准确地检测一个值是否为 null,
is_bool 可以检测一个值是否是布尔值(比如 false),
但存在一个更好的选择:=== 操作符。=== 检测两个值是否同一,
这不同于 PHP 宽松类型世界里的 相等。它也比 is_null() 和 is_bool() 要快一些,并且有些人认为这比使用函数来做比较更干净些。

示例

  1. <?php
  2. $x = 0;
  3. $y = null;
  4.  
  5. // Is $x null?
  6. if($x == null)
  7. print('Oops! $x is 0, not null!');
  8.  
  9. // Is $y null?
  10. if(is_null($y))
  11. print('Great, but could be faster.');
  12.  
  13. if($y === null)
  14. print('Perfect!');
  15.  
  16. // Does the string abc contain the character a?
  17. if(strpos('abc', 'a'))
  18. // GOTCHA! strpos returns 0, indicating it wishes to return the position of the first character.
  19. // But PHP interpretes 0 as false, so we never reach this print statement!
  20. print('Found it!');
  21.  
  22. //Solution: use !== (the opposite of ===) to see if strpos() returns 0, or boolean false.
  23. if(strpos('abc', 'a') !== false)
  24. print('Found it for real this time!');
  25. ?>

陷阱

  • 测试一个返回0或布尔false的函数的返回值时,如strpos(),始终使用===!==,否则你就会碰到问题。

进一步阅读