网站地图    收藏   

主页 > php专栏 > php函数大全 >

再谈php中empty与isset区别详解 - php函数

来源:自学PHP网    时间:2014-11-25 00:26 作者: 阅读:

[导读] empty与isset在php中一个是为空,另一个判断是是否为一个存在的变量了,下面小编来给各位同学介绍php中empty与isset区别,欢迎各位同学进入参考.empty是判断变量值是非空或非零的值,对应空定...

再谈php中empty与isset区别详解

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 = "<br />"
  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 "<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,试比较,代码如下:

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

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论