当前位置: 首页 > 编程日记 > 正文

php empty()和isset()的区别

在使用 php 编写页面程序时,我经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空,开始的时候我习惯了使用 empty() 函数,却发现了一些问题,因此改用 isset() 函数,问题不再。

顾名思义,empty() 判断一个变量是否为“空”,isset() 判断一个变量是否已经设置。正是这种所谓的“顾名思义”,令我开始时走了些弯路:当一个变量值等于0时,empty()也会成立(True),因而会发生 一些意外。原来,empty() 和 isset() 虽然都是变量处理函数,它们都用来判断变量是否已经配置,它们却是有一定的区别:empty还会检测变量是否为空、为零。当一个变量值为0,empty() 认为这个变量同等于空,即相当于没有设置。

比如检测 $id 变量,当 $id=0 时,用empty() 和 isset() 来检测变量 $id 是否已经配置,两都将返回不同的值—— empty() 认为没有配置,isset() 能够取得 $id 的值:

[php] view plaincopy在CODE上查看代码片派生到我的代码片
  1. $id=0;  
  2. empty($id)?print "It's empty .":print "It's $id .";   
  3. //结果:It's empty .  
  4. print "<br>";  
  5. !isset($id)?print "It's empty .":print "It's $id .";  
  6. //结果:It's 0 .  

这意味着,我们在使用变量处理函数时,当该变量可能出现0的值,使用 empty() 要小心,这个时候用 isset 取代它更明智一些。

当一个php页面的 URL 尾部参数出现 id=0 时(比如:test.php?id=0),试比较:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. if(empty($id)) $id=1; - 若 id=0 ,id 也会为1  
  2. if(!isset($id)) $id=1; - 若 id=0 ,id 不会为1  


可分开运行以下代码检测上述推断:

[php] view plaincopy在CODE上查看代码片派生到我的代码片
  1. if(empty($id)) $id=1;  
  2. print $id// 得到 1  
  3.   
  4. if(!isset($id)) $id=1;  
  5. 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 函数

转载于:https://www.cnblogs.com/moqiang02/p/4061289.html

相关文章:

jmap 内存情况

2019独角兽企业重金招聘Python工程师标准>>> -dump dump堆到文件,format指定输出格式&#xff0c;live指明是活着的对象,file指定文件名 [rootlocalhost ~]# jmap -dump:live,formatb,filedump.hprof 187784 Dumping heap to /home/yxgly/dump.hprof ... Heap dump …

(C++)1021 个位数统计

#include<cstdio> #include<cstring>const int M 1000;int main(){char str[M1];int count[10]{0};//全部初始化为0 scanf("%s",str);int len strlen(str);int i;for(i0;i<len;i){count[str[i]-0];}for(i0;i<10;i){if(count[i]>0){printf(&qu…

TOJ--3456--数学题

这题 做出来真的好爽啊... it is cool although it is easy 虽然 已经是大概1 2点的事了 我拖到现在才写是因为------lol 终于赢一把了 --- 先贴下题目&#xff1a; touch me 嗯 我一开始 用的是 3重for 我以为32767的数据量 是很小的.... 结果 TLE。。 OK 那么 我们只能换…

firewalled centos7

zone绑定网卡 firewall-cmd --zoneinternal --add-interfaceens192 --permanent firewall-cmd --permanent --zoneinternal --add-rich-rule"rule family"ipv4" source address"192.168.10.0/24" accept" [rootbyos000 system]# firewall-cmd -…

为Delphi程序添加事件和事件处理器

在Delphi中&#xff0c;事件实际上是专门化的属性&#xff0c;它是一个过程&#xff08;procedure&#xff09;的指针。要添加事件&#xff0c;首先应在所定义的类中说明一个用来指向事件过 程的指针&#xff0c;该指针的作用是当事件一旦发生&#xff0c;就通过这个指针执行所…

(C++)1031 查验身份证 3难点+3注意点

#include<cstdio> #include<cstring> //难点1&#xff1a;检查前17位是否全为数字 //解决之道1&#xff1a;本来就不是整型数字&#xff0c;是字符数字&#xff0c;判断是否在0和9之间即可 //难点2&#xff1a;遇到一个X后&#xff0c;如果不想处理sum了该怎么办 /…

Perl时间处理函数

官方网址&#xff1a;http://search.cpan.org/~stbey/Date-Calc-6.3/lib/Date/Calc.pod#___top use Date::Calc qw(Days_in_YearDays_in_MonthWeeks_in_Yearleap_yearcheck_datecheck_timecheck_business_dateDay_of_YearDate_to_DaysDay_of_WeekWeek_NumberWeek_of_YearMonda…

Linux环境搭建 | 手把手教你安装Linux虚拟机

2019独角兽企业重金招聘Python工程师标准>>> 前言 作为一名Linux工程师&#xff0c;不管是运维、应用、驱动方向&#xff0c;在工作中肯定会需要Linux环境。想要获得Linux环境&#xff0c;一个办法就是将电脑系统直接换成Linux系统&#xff0c;但我们平常用惯了Wind…

企业的覆灭,我监视你的Exchange邮件!

现在很多企业都搭建ExchangeServer平台&#xff0c;一个用户包括Domain admins都是不允许查阅其他用户的邮件信息的&#xff01;殊不知作为Domain Admins权限用户可以经过精心的设置&#xff0c;可以达到浏览到其他用户邮件信息&#xff01; 转载于:https://www.cnblogs.com/al…

(C++)1002 写出这个数

#include<cstdio> #include<cstring>const int M 100; //用字符数组装输入 //定义变量&#xff0c;输出字符数组的长度 //对字符数组遍历求和 //对结果逐位输出汉语拼音 void hanzi(int i){switch(i){case 0:printf("ling");break;case 1:printf("…

IO复用之epoll系列

epoll是什么&#xff1f; epoll是Linux内核为处理大批量文件描述符而作了改进的poll&#xff0c;是Linux下多路复用IO接口select/poll的增强版本&#xff0c;它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候&#xff0c;它…

MVP Summit 2008 照片纪实(二)- 旧金山,Google总部和Stanford大学

坐在洛杉矶机场里&#xff0c;终于为这次MVP峰会的美国之行画上了句号。从旧金山到拉斯维加斯&#xff0c;从拉斯维加斯到大峡谷&#xff0c;最后从大峡谷返回洛杉矶&#xff0c;3天之中总共驾驶历程超过1600英里&#xff08;据说可以赶上出租车司机了&#xff09;。3天之中经历…

(C++)1025 PAT Ranking

#include<cstdio> #include<algorithm> #include<cstring>using namespace std;const int M 100*300;struct testee{//考生 char reg_num[14];//准考证号 int score;//分数 int final_rank;//最终排名 int loc_no;//考场号 int local_rank;//考场内排名 }te…

模态视图(转)

转载请注明出处&#xff0c;原文网址&#xff1a;http://blog.csdn.net/m_changgong/article/details/8127894 作者&#xff1a;张燕广 模态视图不是专门的某个类&#xff0c;而是通过视图控制器的presentViewController方法弹出的视图&#xff0c;我们称为模态视图。 模态视图…

MHA二种高可用架构切换演练

高可用架构一 proxysqlkeepalivedmysqlmha优势&#xff0c;最大程序的降低脑裂风险&#xff0c;可以读写分离&#xff08;需要开启相应的插件支持&#xff09; 一、proxysql 1、安装 tar -zxvf proxysql.tar.gz -C /usr/local/chmod -R 700 /usr/local/proxysqlcd /usr/local/p…

如何关闭事件跟踪程序

最近经常遇到一些独享服务器用户反应自己的服务器联系万网工程师重起后&#xff0c;重新登陆时遇到的界面不知道该如何操作问题。当您看到此界面时&#xff0c;只需要在“注释”下面的空白处随意输入字符即可激活“确定”按钮&#xff0c;点击“确定”后可以进入系统。 这个界…

(C++)1015 德才论

#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int M 100000;struct Testee{char no[10];int de;int cai;int type;//第几类 }peo[M10];bool cmp(Testee a,Testee b){//比较顺序依次为总分&#xff0c;德分&#xf…

Vim命令相关

在shell中&#xff0c;记住一些常用的vim命令&#xff0c;会在操作时候事半功倍。 光标移动 h,j,k,l,h #表示往左&#xff0c;j表示往下&#xff0c;k表示往右&#xff0c;l表示往上 Ctrl f #上一页 Ctrl b #下一页 w, e, W, E #跳到单词的后面&#xff0c;小…

做科研的几点体会

刚刚开始做实验的时候&#xff0c;别人怎么说我就怎么做&#xff0c;每天在实验台旁干到深夜&#xff0c;以为这就是科研了。两个月过去&#xff0c;突然发现自己还在原地踏步。那种感觉&#xff0c;只能用”沮丧”来形 容。我开始置疑自己的行为和观念。感觉有种习惯的力量在束…

ICMP报文分析

一.概述&#xff1a;1. ICMP同意主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议&#xff0c;但ICMP不是高层协议&#xff0c;而是IP层的协议。通常ICMP报文被IP层或更高层协议&#xff08;TCP或UDP&#xff09;使用。一些ICMP报文把差错报文返回给用户进…

(C++)1029 旧键盘

#include<cstdio> #include<cstring>const int M 80;//值得注意的地方是“按照发现顺序 ” //采取的最佳策略是&#xff0c;对于字符串1中的每一个字符&#xff0c;看在字符串2中是否出现int hashmap(char c){int res 0;if(0<c&&c<9){res c-0;}e…

深入理解 python 元类

一、什么的元类 # 思考&#xff1a; # Python 中对象是由实例化类得来的&#xff0c;那么类又是怎么得到的呢&#xff1f; # 疑问&#xff1a; # python 中一切皆对象&#xff0c;那么类是否也是对象&#xff1f;如果是&#xff0c;那么它又是那个类实例化而来的呢&…

使用.NET REACTOR制作软件许可证

使用.NET REACTOR制作软件许可证 原文:使用.NET REACTOR制作软件许可证软件下载地址&#xff1a;http://www.eziriz.com/downloads.htm 做一个简单的许可证系统&#xff0c;下面是具体步骤&#xff1a;1&#xff0c; OPEN ASSEMBLY打开项目可执行文件(debug文件夹里面exe文件…

(C++)CSP 201712-2 游戏

#include<cstdio> #include<algorithm> using namespace std;const int M 1000;int k;bool obsl(int x){if(x%k0||x%10k){return true;//淘汰 }else return false; }int main(){int n;//孩子的个数 scanf("%d%d",&n,&k);int i1;//现在报的数 in…

在wpf中运行EXE文件

最简单的方法&#xff1a;System.Diagnostics.Process.Start("路径");网上的其他方法&#xff1a; Process p new System.Diagnostics.Process(); p.StartInfo.FileName "路径"; p.StartInfo.Arguments ""; …

C语言程序试题

一个无向连通图G点上的哈密尔顿&#xff08;Hamiltion&#xff09;回路是指从图G上的某个顶点出发&#xff0c;经过图上所有其他顶点一次且仅一次&#xff0c;最后回到该顶点的路劲。一种求解无向图上哈密尔顿回路算法的基础实现如下&#xff1a; 假设图G存在一个从顶点V0出发的…

利用OWC创建图表的完美解决方案

http://onlytiancai.cnblogs.com/archive/2005/08/24/221761.html 转载于:https://www.cnblogs.com/Athrun/archive/2008/05/19/1202909.html

(C++)1020 月饼 简单贪心

#include<cstdio> #include<algorithm> using namespace std;int types,weight;//月饼的种类数 struct Mooncake{double totalPrice;double price;double weight;double sell;//卖出了多少 };bool cmp(Mooncake a,Mooncake b){return a.price>b.price; }int ma…

枚举,给枚举赋值

/**************枚举*****************/// public enum Colors{// Red,Yellow,Blue,Black,White// }// public static void main(String[] args) {// Colors c Colors.Yellow;// System.out.println(c);//输出枚举// System.out.println(c.ordinal());//输出枚举对应的序号…

青岛...沙尘暴!太可怕了~什么事儿都有!

受蒙古国和我国内蒙古地区出现沙尘暴天气的影响&#xff0c;28日&#xff0c;山东省青岛、烟台等地出现大范围浮尘天气&#xff0c;空气质量明显下降。 28日&#xff0c;一场大范围的浮尘天气影响到烟台&#xff0c;天空一片浑浊&#xff0c;能见度不足5公里&#xff0c;空气质…