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中的类-什么叫类
Nov 20 PHP
PHP内核介绍及扩展开发指南―基础知识
Sep 11 PHP
使用swoole扩展php websocket示例
Feb 13 PHP
php5.3 goto函数介绍和示例
Mar 21 PHP
getJSON跨域SyntaxError问题分析
Aug 07 PHP
简单介绍PHP的责任链编程模式
Aug 11 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
PHP flush 函数使用注意事项
Aug 26 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
PHP校验15位和18位身份证号的类封装
Nov 07 PHP
PHP信号处理机制的操作代码讲解
Apr 19 PHP
PHP命名空间与自动加载机制的基础介绍
Aug 25 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 XML操作类DOMDocument
2009/12/16 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
由document.body和document.documentElement想到的
2009/04/13 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
python合并文本文件示例
2014/02/07 Python
Python使用MD5加密字符串示例
2014/08/22 Python
Python中的闭包总结
2014/09/18 Python
python中常用的九种预处理方法分享
2016/09/11 Python
解决python测试opencv时imread导致的错误问题
2019/01/26 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
详解django中Template语言
2020/02/22 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
Python项目打包成二进制的方法
2020/12/30 Python
一套SQL笔试题
2016/08/14 面试题
初中生物教学反思
2016/02/20 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
Ajax实现三级联动效果
2021/10/05 Javascript
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers