美文网首页
PHP中empty()与isset()的区别

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

作者: WEB耳 | 来源:发表于2019-07-19 10:23 被阅读0次

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中empty()与isset()的区别

      本文链接:https://www.haomeiwen.com/subject/trodlctx.html