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实现登陆验证码(类似条行码状)
Oct 09 PHP
php生成WAP页面
Oct 09 PHP
PHP取二进制文件头快速判断文件类型的实现代码
Aug 05 PHP
php页面防重复提交方法总结
Nov 25 PHP
php+highchats生成动态统计图
May 21 PHP
简介PHP的Yii框架中缓存的一些高级用法
Mar 29 PHP
CI框架扩展系统核心类的方法分析
May 23 PHP
深入理解php printf() 输出格式化的字符串
May 23 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
php多文件打包下载的实例代码
Jul 12 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 09 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 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 文件上传功能实现代码
2009/06/24 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
str_replace只替换一次字符串的方法
2013/04/09 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
PHP7修改的函数
2021/03/09 PHP
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
node.js中的console.time方法使用说明
2014/12/09 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
原生js仿jquery一些常用方法(必看篇)
2016/09/20 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
详解微信UnionID作用
2019/05/15 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
python入门基础之用户输入与模块初认识
2016/11/14 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
对python中的装包与解包实例详解
2019/08/24 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
python scatter函数用法实例详解
2020/02/11 Python
试用期自我鉴定范文
2014/03/20 职场文书
县委务虚会发言材料
2014/10/20 职场文书
员工离职通知函
2015/04/25 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
学术会议开幕词
2016/03/03 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
在 Python 中利用 Pool 进行多线程
2022/04/24 Python