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 和 XML: 使用expat函数(三)
Oct 09 PHP
isset和empty的区别
Jan 15 PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 PHP
PHP5.5在windows安装使用memcached服务端的方法
Apr 16 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
May 29 PHP
PHP速成大法
Jan 30 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
详解PHP中的状态模式编程
Aug 11 PHP
浅谈PHP中的
Apr 23 PHP
PHP redis实现超迷你全文检索
Mar 04 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
详解在YII2框架中使用UEditor编辑器发布文章
Nov 02 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大神的十大优良习惯
2016/09/14 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
2017/06/29 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
jQuery动画与特效详解
2015/02/01 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
2016/10/27 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
深入浅析var,let,const的异同点
2018/08/07 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
vue3+typeScript穿梭框的实现示例
2020/12/29 Vue.js
Vue项目中使用mock.js的完整步骤
2021/01/12 Vue.js
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
Python enumerate内置库用法解析
2020/02/24 Python
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
自荐书范文
2013/12/08 职场文书
幼儿教师考核制度
2014/01/25 职场文书
高三体育教学反思
2014/01/29 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
详解Node.js如何处理ES6模块
2021/05/15 Javascript
windows安装python超详细图文教程
2021/05/21 Python
Win11 Build 22000.51版本文件资源管理器“命令栏”和上下文菜单有什么新变化?
2021/11/21 数码科技