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 相关文章推荐
粗略计算在线时间,bug:ip相同
Dec 09 PHP
亲密接触PHP之PHP语法学习笔记1
Dec 17 PHP
PHP 设置MySQL连接字符集的方法
Jan 02 PHP
php IP转换整形(ip2long)的详解
Jun 06 PHP
php从字符串创建函数的方法
Mar 16 PHP
PHP读取汉字的点阵数据
Jun 22 PHP
php判断用户是否关注微信公众号
Jul 22 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
Jul 23 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
Jan 17 PHP
PHP的介绍以及优势详细分析
Sep 05 PHP
laravel实现按月或天或小时统计mysql数据的方法
Oct 09 PHP
在laravel5.2中实现点击用户头像更改头像的方法
Oct 14 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
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
php设计模式 Visitor 访问者模式
2011/06/28 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
鼠标图片振动代码
2006/07/06 Javascript
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
2017/02/08 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
vue2配置scss的方法步骤
2019/06/06 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
下载糗事百科的内容_python版
2008/12/07 Python
python中黄金分割法实现方法
2015/05/06 Python
python实现接口并发测试脚本
2019/06/25 Python
python数值基础知识浅析
2019/11/19 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
python学生管理系统的实现
2020/04/05 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
10种CSS3实现的loading动画,挑一个走吧?
2020/11/16 HTML / CSS
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
Linux的文件类型
2016/07/05 面试题
会计学专业学生的求职信范文
2014/01/27 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
2015年社区党建工作汇报材料
2015/06/25 职场文书
公司档案管理制度
2015/08/05 职场文书
2016银行求职自荐信
2016/01/28 职场文书
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang