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 相关文章推荐
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 PHP
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
Dec 31 PHP
PHP 一个比较完善的简单文件上传
Mar 25 PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 PHP
如何取得中文字符串中出现次数最多的子串
Aug 08 PHP
PHP文件读取功能的应用实例
May 08 PHP
php检测文本的编码
Jul 26 PHP
分享php邮件管理器源码
Jan 06 PHP
基于PHP后台的Android新闻浏览客户端
May 23 PHP
header与缓冲区之间的深层次分析
Jul 30 PHP
php curl优化下载微信头像的方法总结
Sep 07 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 15 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
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
详解webpack多页面配置记录
2018/01/22 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
2018/03/20 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
python将ip地址转换成整数的方法
2015/03/17 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
2015/12/24 Python
Python切片工具pillow用法示例
2018/03/30 Python
Python函数返回不定数量的值方法
2019/01/22 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
Python的两道面试题
2013/06/29 面试题
Unix控制后台进程都有哪些进程
2016/09/22 面试题
销售找工作求职信
2013/12/20 职场文书
社团文化节策划书
2014/02/01 职场文书
教育学习自我评价
2014/02/03 职场文书
平安建设工作方案
2014/06/02 职场文书
员工表扬信怎么写
2015/05/05 职场文书
秋菊打官司观后感
2015/06/03 职场文书
爱国主题班会教案
2015/08/14 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
pytorch实现线性回归以及多元回归
2021/04/11 Python
go语言求任意类型切片的长度操作
2021/04/26 Golang