PHP中empty()与isset()的区别

BB在前面

在PHP中,大多数情况下检测变量时使用empty()isset(),在不考虑极微小的性能差异的情况下是可以混用的,但它们之间的使用差异依旧会影响到我们程序的稳定运行。

empry()

判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于 FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。

$a1 = [];
$a2 = [1,2,3];

$a4 = null;
$a5 = false;
$a6 = 0;
$a7 = 'null'

var_dump(empty($a1)); //true
var_dump(empty($a2)); //false
var_dump(empty($a3)); //true
var_dump(empty($a4)); //true
var_dump(empty($a5)); //true
var_dump(empty($a6)); //true

可以看出只要值等同于false的变量检测变量是否为空时,都是返回true,并且检测不存在的变量(代码中的$a3并未定义)时,代码并不会报错,所以可以认为empty()isset()的作用

注:empty()并不能检测空对象(new \stdClass(object)[])是否为空,检测方法使用count()或get_class_varsget_class_methods都为空

isset()

检测变量是否设置,并且不是 NULL。
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是一个 NULL 字节("\0")并不等同于 PHP 的 NULL 常数。

$a1 = [];
$a2 = [1,2,3];

$a4 = null;
$a5 = false;
$a6 = 0;
$a7 = 'null';

var_dump(isset($a1)); // true
var_dump(isset($a2)); // true
var_dump(isset($a3)); // false
var_dump(isset($a4)); // false
var_dump(isset($a5)); // true
var_dump(isset($a6)); // true
var_dump(isset($a7)); // true

可以看出来只有在变量未定义或被设置为null时 ,返回false,设置为其他值等同于与false的值,都返回true

大胆猜测:当变量被定义为null是返回false的原因可能是和PHP的垃圾回收机制有关。PHP 使用了引用计数 (reference counting) GC 机制。每个对象都内含一个引用计数器 refcount,每个 reference 连接到对象,计数器加 1。当 reference 离开生存空间或被设为 NULL,计数器减 1。当某个对象的引用计数器为零时,PHP 知道你将不再需要使用这个对象,释放其所占的内存空间。

总结

当我们需要判断变量是否被定义或为NULL,使用iseet(),判断变量是否是一个为false的值使用empty()

附:值为false的值

字符类型:''、""、'0'、"0"
数字类型:0
布尔类型: false
空类型:null、NULL
数组类型:[]

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • PHP的isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, m...
    寄去远方的盛夏阅读 442评论 0 2
  • php可以做什么 php是一种可以在服务器端运行的编程语言,可以运行在Web服务器端。 php是一门后台编程语言,...
    dptms阅读 1,926评论 1 15
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,819评论 0 10
  • 11、谈谈mvc的认识。由模型、视图、控制器完成的应用程序,由模型发出要实现的功能到控制器,控制器接收组织功能传递...
    像敏锐的狗阅读 399评论 0 2
  • 不善良的人那么多,你受点伤害再正常不过。 只希望,不管你所处的环境如何糟糕 都不要 轻易放弃自己 毕竟漫长的人生,...
    水墨清欢阅读 153评论 0 0