php empty()与isset()区别的详细介绍


Posted in PHP onJune 17, 2013

在使用 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 "<br>";
    !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

PHP 相关文章推荐
十天学会php(1)
Oct 09 PHP
PHP 常用函数库和一些实用小技巧
Jan 01 PHP
PHP中设置时区方法小结
Jun 03 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
如何让CI框架支持service层
Oct 29 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
Jul 29 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
php 数组随机取值的简单实例
May 23 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
May 28 PHP
Ajax+PHP实现的模拟进度条功能示例
Feb 11 PHP
laravel接管Dingo-api和默认的错误处理方式
Oct 25 PHP
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
Apr 11 PHP
php include和require的区别深入解析
Jun 17 #PHP
浅析php header 跳转
Jun 17 #PHP
解析php中heredoc的使用方法
Jun 17 #PHP
深入PHP5中的魔术方法详解
Jun 17 #PHP
php.ini 配置文件的深入解析
Jun 17 #PHP
解析posix与perl标准的正则表达式区别
Jun 17 #PHP
Session服务器配置指南与使用经验的深入解析
Jun 17 #PHP
You might like
php 生成自动创建文件夹并上传文件的示例代码
2014/03/07 PHP
PHP生成随机字符串(3种方法)
2015/09/25 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
FireFox JavaScript全局Event对象
2009/06/14 Javascript
JavaScript 程序编码规范
2010/11/23 Javascript
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
2016/03/07 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
vue+springboot前后端分离实现单点登录跨域问题解决方法
2018/01/30 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
9种方法优化jQuery代码详解
2020/02/04 jQuery
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
Django 限制用户访问频率的中间件的实现
2018/08/23 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
python的等深分箱实例
2019/11/22 Python
Python json转字典字符方法实例解析
2020/04/13 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
通俗讲解python 装饰器
2020/09/07 Python
Python类class参数self原理解析
2020/11/19 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
数据库面试要点基本概念
2013/10/31 面试题
优秀的2014年两会精神解读
2014/03/17 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
防汛工作情况汇报
2014/10/28 职场文书
vue实力踩坑之push当前页无效
2022/04/10 Vue.js