在PHP中,如果变量没有值,为什么isset()仍然返回TRUE?

时间:2011-02-11 03:01:57

标签: php programming-languages

这是我的代码:

<?php
   $ja = ''; 

  if(isset($ja))
   echo "cool!";

?>

我觉得“很酷!”在我的浏览器中运行这段简单的代码时。我从php.net学到了

  

isset - 确定是否设置了变量   并且不是NULL

好吧,在我的代码中,我确实声明了变量$ ja,但我没有添加任何值,所以不应该是“NULL”吗?

6 个答案:

答案 0 :(得分:5)

即使''似乎没什么,它仍然有一个值(字符串末尾的NULL字符)。

isset()检查变量是否设置,在这种情况下(到''),它是。您可能希望事先将$ ja设置为NULL,而不是将其设置为空字符串...或使用empty();)

答案 1 :(得分:3)

空字符串仍然是一个值。所以你做了给它一个非空的值 - ''是一个完全正常的字符串值。也许你想要! empty($ja)

答案 2 :(得分:3)

Isset用于判断是否设置了变量:

isset($notDefined) //false
$notDefined = 0;
isset($notDefined) //true

(假设之前没有定义$ notDefined)

要检查变量是否为空,您可以使用if(empty($var))if($var==0)

答案 3 :(得分:3)

您确实为$ ja添加了值 - 您将其设置为空字符串。空字符串不为空。

您可能会感到困惑的是,当您将其转换为布尔值时,空字符串和null都会在PHP中评估为“false”。

PHP的文档在使用isset时非常清楚。

答案 4 :(得分:0)

isset函数确定对象是否具有值。 “NULL”确实是赋予对象任何值的唯一方法。 $ s =''只是输出什么都没有。 BOOL值(true / false)表示它是yes或no ... 0只是给对象一个int值为0。

答案 5 :(得分:-1)

正如名称所暗示的那样,它会检查是否已设置某个变量,从某种意义上说它不具有某些值,但从某种意义上说它已经被创建了。我认为这个名字可能有点令人困惑,所以我将带来一个javascript类比。在javascript中检查变量是否存在,请执行以下操作:

if (typeof(somevar) == "undefined")
    alert("Sorry, the variable has not been set already")
else
    alert("Congratulations, the variable has not been set")

所以,你正在做的是你正在创建一个变量$ja,因为这样做,变量已经存在,因此已经设置。

希望这有帮助