前言

老生常谈的话题,之所以用这两个函数做对比,是因为常用来判断变量是否为空,但是它们有些不同,下面进行下对比。

定义

先来看下两个函数的手册

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)。

变量值emptyisset是否相同
falsebool(true)bool(true)不相同
nullbool(true)bool(false)相同
''bool(true)bool(true)不相同
'0'bool(true)bool(true)不相同
0bool(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 函数

变量emptyis_nullisset
$a=””truefalsetrue
$a=nulltruetruefalse
var $atruetruefalse
$a=array()truefalsetrue
$a=falsetruefalsetrue
$a=15falsefalsetrue
$a=1falsefalsetrue
$a=0truefalsetrue
$a=”0”truefalsetrue
$a=”true”falsefalsetrue
$a=”false”falsefalsetrue
最后修改:2022 年 01 月 13 日
如果觉得我的文章对你有用,请随意赞赏~