PHP isset()函数与empty()函数区别

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

比如检测 $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. if(!isset($id)) $id=1;
  4. print $id; //得到 0

看个实例,代码如下:

  1. <?php
  2. $var = 0;
  3. // 结果为 true,因为 $var 为空
  4. if (emptyempty($var)) {
  5. echo '$var is either 0 or not set at all';
  6. }
  7. // 结果为 false,因为 $var 已设置
  8. if (!isset($var)) {
  9. echo '$var is not set at all';
  10. }
  11. ?>

由于这是一个语言结构而非函数,因此它无法被变量函数调用,empty() 只检测变量,检测任何非变量的东西都将导致解析错误,换句话说,后边的语句将不会起作用:empty(addslashes($name)).

下面是经过脚本之家测试过的一段isset与empty函数详细例子的代码,看完这个基本上就差不多了,代码如下:

  1. <?php
  2. error_reporting(e_all);
  3. echo '<b>未定义$var</b><br>';
  4. echo "isset测试:<br>";
  5. if ( isset ( $var ))
  6. {
  7. echo '变量$var存在!<br>' ;
  8. }
  9. echo "empty测试:<br>";
  10. if ( emptyempty ( $var )){
  11. echo '变量$var的值为空<br>';
  12. }
  13. else
  14. {
  15. echo '变量$var的值不为空<br>';
  16. }
  17. echo "变量直接测试:<br>";
  18. if ( $var ){
  19. echo '变量$var存在!<br>';
  20. }
  21. else {
  22. echo '变量$var不存在!<br>';
  23. }
  24. echo '----------------------------------<br>';
  25. echo '<b>$var = ''</b><br>';
  26. echo "isset测试:<br>";
  27. $var = '';
  28. if ( isset ( $var ))
  29. {
  30. echo '变量$var存在!<br>' ;
  31. }
  32. echo "empty测试:<br>";
  33. if ( emptyempty ( $var )){
  34. echo '变量$var的值为空<br>';
  35. }
  36. else
  37. {
  38. echo '变量$var的值不为空<br>';
  39. }
  40. echo "变量直接测试:<br>";
  41. if ( $var ){
  42. echo '变量$var存在!<br>';
  43. }
  44. else {
  45. echo '变量$var不存在!<br>';
  46. }
  47. echo '----------------------------------<br>';
  48. echo '<b>$var = 0</b><br>';
  49. echo 'isset测试:<br>';
  50. $var = 0 ;
  51. if ( isset ( $var ))
  52. {
  53. echo '变量$var存在!<br>' ;
  54. }
  55. echo "empty测试:<br>";
  56. if ( emptyempty ( $var )){
  57. echo '变量$var的值为空<br>';
  58. }
  59. else
  60. {
  61. echo '变量$var的值不为空<br>';
  62. }
  63. echo "变量直接测试:<br>";
  64. if ( $var ){
  65. echo '变量$var存在!<br>';
  66. }
  67. else {
  68. echo '变量$var不存在!<br>';
  69. }
  70. echo '----------------------------------<br>';
  71. echo '<b>$var = null</b><br>';
  72. echo 'isset测试:<br>';
  73. $var = null ;
  74. if ( isset ( $var ))
  75. {
  76. echo '变量$var存在!<br>' ;
  77. }
  78. echo "empty测试:<br>";
  79. if ( emptyempty ( $var )){
  80. echo '变量$var的值为空<br>';
  81. }
  82. else
  83. {
  84. echo '变量$var的值不为空<br>';
  85. }
  86. echo "变量直接测试:<br>";
  87. if ( $var ){
  88. echo '变量$var存在!<br>';
  89. }
  90. else {
  91. echo '变量$var不存在!<br>';
  92. }
  93. echo '----------------------------------<br>';
  94. echo '<b>$var ="php"</b><br>';
  95. echo 'isset测试:<br>';
  96. $var = "php";
  97. if ( isset ( $var ))
  98. {
  99. echo '变量$var存在!<br>' ;
  100. }
  101. echo "empty测试:<br>";
  102. if ( emptyempty ( $var )){
  103. echo '变量$var的值为空<br>';
  104. }
  105. else
  106. {
  107. echo '变量$var的值不为空<br>';
  108. }
  109. echo "变量直接测试:<br>";
  110. if ( $var ){
  111. echo '变量$var存在!<br>';
  112. } //开源软件:phpfensi.com
  113. else {
  114. echo '变量$var不存在!<br>';
  115. }
  116. ?>