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中设置多级目录session的问题
Aug 08 PHP
PHP 无限分类三种方式 非函数的递归调用!
Aug 26 PHP
php 函数中使用static的说明
Jun 01 PHP
控制PHP的输出:缓存并压缩动态页面
Jun 11 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 PHP
ioncube_loader_win_5.2.dll的错误解决方法
Jan 04 PHP
PHP json_encode() 函数详解及中文乱码问题
Nov 05 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 PHP
PHP实现统计在线人数功能示例
Oct 15 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
php中上传文件的的解决方案
Sep 25 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 calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
2018/04/28 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
wxpython学习笔记(推荐查看)
2014/06/09 Python
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
python如何保证输入键入数字的方法
2019/08/23 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
Python callable内置函数原理解析
2020/03/05 Python
车间统计员岗位职责
2014/01/05 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
珍惜资源保护环境的建议书
2014/05/14 职场文书
路政管理求职信
2014/06/18 职场文书
宿舍标语大全
2014/06/19 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
个人融资协议书
2014/10/02 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
四年级小学生评语
2014/12/26 职场文书
关于学习的决心书
2015/02/05 职场文书
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js