热门标签 | 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

推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
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社区 版权所有