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 相关文章推荐
在PHP中使用模板的方法
May 24 PHP
php读取html并截取字符串的简单代码
Nov 30 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 PHP
PHP删除非空目录的函数代码小结
Feb 28 PHP
zend framework文件上传功能实例代码
Dec 25 PHP
destoon数据库表说明汇总
Jul 15 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
Oct 13 PHP
php 微信公众平台开发模式实现多客服的实例代码
Nov 07 PHP
php获取excel文件数据
Apr 21 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
PHP如何开启Opcache功能提升程序处理效率
Apr 27 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.MVC的模板标签系统(二)
2006/09/05 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
简单实现PHP留言板功能
2016/12/21 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
jquery操作checked属性以及disabled属性的多种方法
2014/06/20 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
DWR3 访问WEB元素的两种方法实例详解
2017/01/03 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
CSS3 特效范例整理
2011/08/22 HTML / CSS
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
英国手机零售商:Metrofone
2019/03/18 全球购物
求职信的最佳写作思路
2014/02/01 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
辞职信怎么写
2015/02/27 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
2016年全国爱牙日宣传活动总结
2016/04/05 职场文书
怎样写好工作计划
2019/04/10 职场文书
pytorch中的 .view()函数的用法介绍
2022/03/17 Python
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle