前言
老生常谈的话题,之所以用这两个函数做对比,是因为常用来判断变量是否为空,但是它们有些不同,下面进行下对比。
定义
先来看下两个函数的手册
empty
empty():函数用于检查一个变量是否为空,如变量存在,且值为非空、非零时返回 FALSE 否则返回 TRUE。如果变量不存在或者它的值等同于FALSE,那么它会被认为不存在,empty()并不会产生警告。
语法:
empty(var)
参数:$var : 要检查的变量,可以是数组
注意:empty()判断变量是,即使变量不存在也不会发生警报,
示例代码:
<?php
$a = 'ss';
var_dump(empty($a));
// bool(false)
$b = null;
var_dump(empty($b));
// bool(true)
$c = 0;
var_dump(empty($c));
// bool(true)
$d = array();
var_dump(empty($d));
// bool(true)
$e = array('1','2');
var_dump(empty($e));
// bool(false)
$f = '';
var_dump(empty($f));
// bool(true)
$g = false;
var_dump(empty($g));
// bool(true)
var_dump(empty($h));
// bool(true)
$j = '0';
var_dump(empty($j));
// bool(true)
$arr = array('a' => 'mochu','b' => 'feiniaomy.com');
var_dump(empty($arr['a']));
// bool(false)
var_dump(empty($arr['c']));
// bool(true)
?>
以上代码总结说明:
1、若变量不存在则返回 TRUE
2、若变量存在且其值为""、0、"0"、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 TURE
3、若变量存在且值不为""、0、"0"、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 FALSE
4、empty() 函数也可以用来判断数组中指定的键是否存在,存在返回 FALSE,不存在返回TRUE
isset
isset():检测变量是否设置,并且不是 NULL。成立返回true 否则返回 false;
语法:
isset(var)
参数:
var 要检查的变量
示例代码:
<?php
$a = 'ss';
var_dump(isset($a));
// bool(true)
$b = null;
var_dump(isset($b));
// bool(false)
$c = 0;
var_dump(isset($c));
// bool(true)
$d = array();
var_dump(isset($d));
// bool(true)
$e = array('1','2');
var_dump(isset($e));
// bool(true)
$f = '';
var_dump(isset($f));
// bool(true)
var_dump(isset($g));
// bool(false)
$h = false;
var_dump(isset($h));
// bool(true)
?>
以上代码总结说明:
通过上面多行代码的打印结果对比,不难发现。只要变量存在并且变量不为 null 那个isset() 函数返回的结果都是 true,解释变量的值为空(不是null),或 0 都会返回 true
详细对比
以下罗列几种可能出现的空值,使用两个函数判断变量是否为空,对比一下返回值是否符合期待(注:isset 返回 false 等同于 empty 返回 true)。
变量值 | empty | isset | 是否相同 |
---|---|---|---|
false | bool(true) | bool(true) | 不相同 |
null | bool(true) | bool(false) | 相同 |
'' | bool(true) | bool(true) | 不相同 |
'0' | bool(true) | bool(true) | 不相同 |
0 | bool(true) | bool(true) | 不相同 |
array() | bool(true) | bool(true) | 不相同 |
未定义 | bool(true) | bool(false) | 相同 |
由上表可以看出,empty 认为所有值都是空;而 isset 除了 null 和未定义,都认为已设置并且非 NULL。了解了两个函数的不同点,在写代码的时候根据需求进行选择。
区别结论
1、只要变量是为“”(空字符串)或者0,或者是false和null,只要是这些值empty()函数都会返回TRUE
2、isset是判断变量是否存在,只要这个变量不是 null 或是未赋值,都会返回TRUE
3、当要 判断一个变量是否已经声明(是否已经存在)的时候 可以使用 isset 函数
4、当要 判断一个变量是否已经赋值且不为空不为0 可以用 !empty 函数
5、当要 判断一个变量是否存在且不为空 先isset 函数 再用 !empty 函数
6、当要 判断一个变量是否为NULL 可以用 is_null 函数
变量 | empty | is_null | isset |
---|---|---|---|
$a=”” | true | false | true |
$a=null | true | true | false |
var $a | true | true | false |
$a=array() | true | false | true |
$a=false | true | false | true |
$a=15 | false | false | true |
$a=1 | false | false | true |
$a=0 | true | false | true |
$a=”0” | true | false | true |
$a=”true” | false | false | true |
$a=”false” | false | false | true |