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 相关文章推荐
分页显示Oracle数据库记录的类之二
Oct 09 PHP
php上传、管理照片示例
Oct 09 PHP
PHP将XML转数组过程详解
Nov 13 PHP
php使用PDO方法详解
Dec 27 PHP
thinkPHP下ueditor的使用方法详解
Dec 26 PHP
PHP 的比较运算与逻辑运算详解
May 12 PHP
PHP编写登录验证码功能 附调用方法
May 19 PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 PHP
phpinfo无法显示的原因及解决办法
Feb 15 PHP
PHP进阶学习之垃圾回收机制详解
Jun 18 PHP
PHP命名空间定义与用法实例分析
Aug 14 PHP
php使用Swoole实现毫秒级定时任务的方法
Sep 04 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专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
ie 调试javascript的工具
2009/04/29 Javascript
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
AngularJS快速入门
2015/04/02 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
[01:58]2018DOTA2亚洲邀请赛趣味视频——交流
2018/04/03 DOTA
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
2019/11/20 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
python def 定义函数,调用函数方式
2020/06/02 Python
python3 中时间戳、时间、日期的转换和加减操作
2020/07/14 Python
Python读写Excel表格的方法
2021/03/02 Python
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
软件配置管理有什么好处
2015/04/15 面试题
庆祝教师节活动方案
2014/01/31 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
纪念九一八事变演讲稿1000字
2014/09/14 职场文书
综合测评个人总结
2015/03/03 职场文书
详解Python牛顿插值法
2021/05/11 Python
52条SQL语句教你性能优化
2021/05/25 MySQL