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 变量定义方法
Jun 14 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
Jun 25 PHP
php生成RSS订阅的方法
Feb 13 PHP
php基于socket实现SMTP发送邮件的方法
Mar 05 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
Mar 19 PHP
php简单防盗链实现方法
Jul 29 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
YiiFramework入门知识点总结(图文教程)
Dec 28 PHP
mysql查找删除重复数据并只保留一条实例详解
Sep 24 PHP
PHP yield关键字功能与用法分析
Jan 03 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 PHP
php的lavarel框架中join和orWhere的用法
Dec 28 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 实例化类的一点摘记
2008/03/23 PHP
PHP分页效率终结版(推荐)
2013/07/01 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
浅谈PHP的反射机制
2016/12/15 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
学习vue.js计算属性
2016/12/03 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
详解React 条件渲染
2020/07/08 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
wxpython 学习笔记 第一天
2009/02/09 Python
Python切换pip安装源的方法详解
2016/11/18 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
python中for in的用法详解
2020/04/17 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
法学毕业生自我鉴定
2013/11/08 职场文书
《小山羊和小灰兔》教学反思
2014/02/19 职场文书
电子商务专业求职信
2014/03/08 职场文书
yy婚礼司仪主持词
2014/03/14 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏