PHP isset()与empty()的使用区别详解


Posted in PHP onFebruary 10, 2017

在使用 php 编写页面程序时,我经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空,开始的时候我习惯了使用 empty() 函数,却发现了一些问题,因此改用 isset() 函数,问题不再。

顾名思义,empty() 判断一个变量是否为“空”,isset() 判断一个变量是否已经设置。正是这种所谓的“顾名思义”,令我开始时走了些弯路:当一个变量值等于0时,empty()也会成立(True),因而会发生 一些意外。原来,empty() 和 isset() 虽然都是变量处理函数,它们都用来判断变量是否已经配置,它们却是有一定的区别:empty还会检测变量是否为空、为零。当一个变量值为0,empty() 认为这个变量同等于空,即相当于没有设置。

比如检测 $id 变量,当 $id=0 时,用empty() 和 isset() 来检测变量 $id 是否已经配置,两都将返回不同的值—— empty() 认为没有配置,isset() 能够取得 $id 的值:

$id=0;
 empty($id)?print "It's empty .":print "It's $id ."; 
  //结果:It's empty .
 print "
";
 !isset($id)?print "It's empty .":print "It's $id .";
  //结果:It's 0 .

这意味着,我们在使用变量处理函数时,当该变量可能出现0的值,使用 empty() 要小心,这个时候用 isset 取代它更明智一些。

当一个php页面的 URL 尾部参数出现 id=0 时(比如:test.php?id=0),试比较:

if(empty($id)) $id=1; - 若 id=0 ,id 也会为1
if(!isset($id)) $id=1; - 若 id=0 ,id 不会为1

可分开运行以下代码检测上述推断:

if(empty($id)) $id=1;
 print $id; // 得到 1
 if(!isset($id)) $id=1;
 print $id; //得到 0

要说它们的联系,其共同点就是empty()和 isset()都是变量处理函数,作用是判断变量是否已经配置,正是由于它们在处理变量过程中有很大的相似性,才导致对它们的关系认识不足。单从 empty()和isset()这两个函数本身来考虑的话会把人弄得更糊涂,换一个角度来它。empty()和isset()的处理对象无外乎未定义变量,0,空字符串。

如果变量为0,则empty()会返回TRUE,isset()会返回TRUE;

如果变量为空字符串,则empty()会返回TRUE,isset()会返回TRUE;

如果变量未定义,则empty()会返回TRUE,isset()会返回FLASE;

手册中对empty()的解释如下:

描述bool empty( mixed var )

如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。

手册中对isset()的解释如下:

isset()检测变量是否设置

描述bool isset ( mixed var [, mixed var [, ...]] )

如果 var 存在则返回 TRUE,否则返回 FALSE。

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

警告: isset() 只能用于变量,因为传递任何其它参数都将造成解析错误。若想检测常量是否已设置,可使用defined()函数。

当要 判断一个变量是否已经声明的时候 可以使用 isset 函数

当要 判断一个变量是否已经赋予数据且不为空 可以用 empty 函数

当要 判断 一个变量 存在且不为空 先isset 函数 再用 empty 函数

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
提取HTML标签
Oct 09 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
Jul 03 PHP
PHP三元运算符的结合性介绍
Jan 10 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
Sep 05 PHP
PHP面向对象——访问修饰符介绍
Nov 08 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
May 12 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
Feb 15 PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 PHP
如何在PHP中读写文件
Sep 07 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
Feb 10 #PHP
Thinkphp3.2实用篇之计算型验证码示例
Feb 09 #PHP
PHP 验证身份证是否合法的函数
Feb 09 #PHP
如何打开php的gd2库
Feb 09 #PHP
利用PHP访问带有密码的Redis方法示例
Feb 09 #PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 #PHP
使用php实现网站验证码功能【推荐】
Feb 09 #PHP
You might like
php对大文件进行读取操作的实现代码
2013/01/23 PHP
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
Python中的浮点数原理与运算分析
2017/10/12 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
Python如何执行系统命令
2020/09/23 Python
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
《雪儿》教学反思
2014/04/17 职场文书
个人贷款收入证明
2014/10/26 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL
Python如何用re模块实现简易tokenizer
2022/05/02 Python
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers