天天看点

php 相等性比较 以及 empty,isset, isnull

变量为空

以下的东西被认为是空的:

  • “” (空字符串)
  • 0 (作为整数的0)
  • 0.0 (作为浮点数的0)
  • “0” (作为字符串的0)
  • NULL
  • FALSE
  • array() (一个空数组)
  • $var; (一个声明了,但是没有值的变量)

判断语句中空值返回false,以下代码不会产生任何输出,因为if 语句中的判断都为false:

$emptyList = ["",  , , "0", NULL, FALSE, array(), $var, ];
foreach($emptyList as $val) {
    if ($val) {
        var_dump($val);
    }
}
           

比较运算符:

==

===

  • ==

    只涉及到值的比较
var_dump( == '0.0'); // true
var_dump( == ''); // true
var_dump( == false); // true
           
  • ===

    同时涉及 值 与类型的比较, 更为严格
var_dump( === '0.0'); // false
var_dump( === ''); // false
var_dump( === false); // false
           
  • null 与 空值 通过

    ==

    比较, 除了 “0” ,都返回true:
<?php
$emptyList = ["",  , , "0", NULL, FALSE, array(), $var, ];
foreach($emptyList as $val) {
    var_dump($val == null);
}
           

empty, isset, isnull

  • empty:检查一个变量是否为空
<?php
$emptyList = ["",  , , "0", NULL, FALSE, array(), $var, ];
foreach ($emptyList as $e) {
    var_dump(empty($e));
}
/*
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
*/
           
  • isset:判断变量var 存在并且值不是 NULL 则返回 TRUE,否则返回 FALSE。
$var = ;
var_dump(isset($var)); // true

unset($var);
var_dump(isset($var)); // false

$var = null;
var_dump(isset($var)); // false
           
  • isnull: 判断变量是否 为 null , 等价于

    === null

注意

空值之间的

==

比较不一定返回 true :

// 不具传递性
var_dump( == '0'); // true
var_dump('' ==  ); // true
var_dump('0' == ''); // false

var_dump( == []); // false
           

最佳实践

  • 空值判断使用 empty 判断;
  • isset 无法判断存在但值为null的变量;
  • php

    ==

    ===

    差别在于后者同时进行类型相等判断