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 相关文章推荐
加强版phplib的DB类
Mar 31 PHP
PHP Mysql编程之高级技巧
Aug 27 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
linux下安装php的memcached客户端
Aug 03 PHP
新浪SAE搭建PHP项目教程
Jan 28 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
Jan 05 PHP
理解PHP中的Session及对Session有效期的控制
Jan 08 PHP
Joomla开启SEF的方法
May 04 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
Nov 05 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
Jul 31 PHP
php微信公众号开发之简答题
Oct 20 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 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
php输入流php://input使用浅析
2014/09/02 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
javascript类继承机制的原理分析
2009/09/12 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
详解使用mocha对webpack打包的项目进行"冒烟测试"的大致流程
2020/04/27 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
Python设置默认编码为utf8的方法
2016/07/01 Python
python 自动批量打开网页的示例
2019/02/21 Python
Python模块汇总(常用第三方库)
2019/10/07 Python
Python命令行click参数用法解析
2019/12/19 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
Python 如何对文件目录操作
2020/07/10 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
货车司机岗位职责
2014/03/18 职场文书
太太口服液广告词
2014/03/20 职场文书
大学生实习证明范本
2014/09/19 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书
小学教研工作总结2015
2015/05/13 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL