php中empty函数与isset函数的用法区别

isset

isset只有在变量是null的时候返回false 其他任何时候返回true

(php中认为变量是null的情况 1、未赋值或初始化的变量。2、赋值为null的变量)

$null = null;
$num = 0;
$str = '';
$bool = false;
var_dump(isset($null)); // false
var_dump(isset($num));  // true
var_dump(isset($str));  // true
var_dump(isset($bool)); // true

empty

empty判断变量为空的情况 有5种情况会返回true

1、空字符串 ''

2、数字零 0

3、bool值 false

4、null

5、字符串零  '0'

$null = null;
$num = 0;
$str = '';$bool = false;var_dump(empty($null)); // true
var_dump(empty($num)); // true
var_dump(empty($snum)); // true
var_dump(empty($str)); // true
var_dump(empty($bool)); // true
总结:

isset只有在值为null时候人为没有设置值 返回false

empty会对5种情况判定为空值

注意:这两个函数的参数只能是变量不能是常量

empty(0)

empty('abc')

isset(null)

这样的写法是会报错的

2015-11-12  更新

空对象 和多层数组在 empty 中是不会返回 true 的

空对象返回的是一个资源

多层空数组是有 key 的

数组如果需要检测是否为空需要先过滤下数组        array_filter

class a{}
$a = new a;
// $a = array();
// $a = array(array(),array());
/*
empty : 
    空对象返回     false
    多层空数组返回 false
    单层空数组返回 true
*/
var_dump(empty($a));
die;


更新 2015-11-19 

empty  isset  最多的用处是在controller端 处理用户请求的数据

去除xss的情况   着重讨论下数组的情况

数组 $array = array()

当我们需要数组中的一个数据的时候都是 $array[$key] 这样的形式( 多位数组也是这样 )

一般还会赋值给一个变量方便以后的使用


但是 当 这个key在数组中不存在 php notic会报错     Notice: Undefined index:

所以在赋值前会对数据进行检测 检测key是否存在 检测数据是否为空 空字符串 或者 null 等 不需要的数据


对数组的处理用到的函数有3中      array_key_exists      isset       empty




array_key_exists

只能检查数组中是否存在key值


isset

可以检测数组中是否存在key值    如果不存在  数组 $arr['key']  就是一个未赋值的变量  就是  NULL   

isset 就会返回false  

但如果  key 存在  且这个数组的对应的key值就是 NULL   isset 同样返回false


所以 仅仅检测数组是否存在key   要用 array_key_exists    用isset来判断是不靠谱的  

isset 多一个条件就是  当key存在且里面的值是NULL  的情况



empty

当数组中的key 不存在时候 作用如同 isset

当key存在  且里面的值是    NULL false 0 '' '0' 这五种情况也会返回 true



总结 

array_key_exists 仅判断数组key是否存在

isset 判断数组key是否存在 或者 数组key存在 里面的值是 NULL

empty 判断数组key是否存在 且里面的值是 NULL false 0 '' '0'



特殊情况 上面提到的数组key多是string 当key数数字的情况就会出现一种特殊情况  看这个   http://blog.csdn.net/fanyilong_v5/article/details/38989421 

$array('aef','bcd');

echo $array[1][2] == 'd'

这时候就只能用 array_key_exists 这个函数






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值