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

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

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

$x = 0;
$y = null;

// Is $x null?
if($x == null)
    print('$x is 0, not null!');

// Is $y null?
if(is_null($y))
    print('$y is null,可以使用===更快的语句');

if($y === null)
    print('Perfect!');

//来下面一个大坑
if(strpos('abc', 'a'))
    // 上面找到a的位置是0,所以if判断不会通过下面这句
    print('哦,没找到a');

//使用 !==进行值和类型的对比
if(strpos('abc', 'a') !== false)
    print('这才是正确的');

小结

  • 测试一个返回0或布尔false的函数的返回值时,如strpos(),始终使用===!==,否则你就会碰到问题。
posted @ 2016-09-01 11:00  忙于厮杀  阅读(521)  评论(0编辑  收藏  举报