热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

再谈php中empty与isset区别详解

empty与isset在php中一个是为空,另一个判断是是否为一个存在的变量了,下面小编来给各位同学介绍php中empty与isset区别,欢迎各位同学进入参考.empty是判断变量值是非空或非零的值,对应空定义包括:(...
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
当前位置:首页 > PHP教程 > php函数 > 列表
再谈php中empty与isset区别详解
发布: 来源:  添加日期:2014-09-13 13:50:45 浏览: 评论:0 

empty与isset在php中一个是为空,另一个判断是是否为一个存在的变量了,下面小编来给各位同学介绍php中empty与isset区别,欢迎各位同学进入参考.

empty是判断变量值是非空或非零的值,对应空定义包括:“”(空字符串)、0、“0”、NULL、FALSE、array()和$var(只声明但未赋值),也就是说当变量值为上述这些,empty返回TRUE,其他的都返回FALSE.

isset是检测变量是否设置,并且不是 NULL,变量设置可以从几个方面来说,1:最简单的就是变量是否先声明和赋值;2:array中是否存在对应的index或key;3:object中是否存在对应的属性。

从上面的两个function定义可以看到,在某些情况下,两者可以公用,但其区别还是很大的,另外它们都只能检测变量,检测任何非变量的东西都将导致解析错误,例如直接检查另一个function的返回值(empty(otherFunction())),你将看到“Fatal error: Can’t use function return value in write context in”这样的错误.

另外isset可以一次检查多个变量,例如:isset($var1, $var2, $var3),当这三个值分别的isset都为TRUE结果为TRUE,否则结果为FALSE.

测试代码如下:

  1. $sep = ""
  2.  
  3. echo 'test undeclared var empty : '
  4. var_dump(emptyempty($var)); // TRUE 
  5. echo $sep . 'test undeclared var isset : '
  6. var_dump(isset($var)); // FALSE 
  7.  
  8. $var
  9. echo $sep . 'test declared var but no set value empty : '
  10. var_dump(emptyempty($var)); // TRUE 
  11. echo $sep . 'test declared var but no set value isset : '
  12. var_dump(isset($var)); // FALSE, 变量申明未赋值,默认值为NULL 
  13.  
  14. $var = NULL; 
  15. echo $sep . 'test declared var and set value NULL empty : '
  16. var_dump(emptyempty($var)); // TRUE 
  17. echo $sep . 'test declared var and set value NULL isset : '
  18. var_dump(isset($var)); // FALSE, 变量申明赋值为NULL 
  19.  
  20. $var1 = ''$var2 = '0'$var3 = 0; $var4 = FALSE; $var5 = array(); 
  21. //开源代码phpfensi.com 
  22. echo $sep . 'test '' empty : '
  23. var_dump(emptyempty($var1)); // TRUE 
  24. echo $sep . 'test '0' empty : '
  25. var_dump(emptyempty($var2)); // TRUE 
  26. echo $sep . 'test 0 empty : '
  27. var_dump(emptyempty($var3)); // TRUE 
  28. echo $sep . 'test FALSE empty : '
  29. var_dump(emptyempty($var4)); // TRUE 
  30. echo $sep . 'test array() empty : '
  31. var_dump(emptyempty($var5)); // TRUE 
  32. echo $sep . 'test '', '0', 0, FALSE, array() isset : '
  33. var_dump(isset($var1$var2$var3$var4$var5)); // TRUE,  变量申明并赋值为空字符串 

输出的结果为:

  1. test undeclared var emptyempty : bool(true) 
  2. test undeclared var isset : bool(false) 
  3. test declared var but no set value emptyempty : bool(true) 
  4. test declared var but no set value isset : bool(false) 
  5. test declared var and set value NULL emptyempty : bool(true) 
  6. test declared var and set value NULL isset : bool(false) 
  7. test '' emptyempty : bool(true) 
  8. test '0' emptyempty : bool(true) 
  9. test 0 emptyempty : bool(true) 
  10. test FALSE emptyempty : bool(true) 
  11. test array() emptyempty : bool(true) 
  12. test '''0', 0, FALSE, array() isset : bool(true) 

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

  1. $id=0; 
  2.    emptyempty($id)?print "It's empty .":print "It's $id .";  
  3.      //结果:It's empty . 
  4.    print "
    "
  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,试比较,代码如下:

if(empty($id)) $id=1; - 若 id=0,id 也会为1

if(!isset($id)) $id=1; - 若 id=0,id 不会为1

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

  1. if(emptyempty($id)) $id=1; 
  2.    print $id// 得到 1 
  3.  
  4.    if(!isset($id)) $id=1; 
  5.    print $id//得到 0

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
author-avatar
书友48169582
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有