`if(isset($ _ SESSION))`和`if($ _SESSION)`之间的区别?

时间:2012-05-07 23:50:10

标签: php if-statement isset

我注意到人们常常只写

<?php  if($_SESSION['username']) {...} ?>

我一直在使用:

 <?php if(isset($_SESSION['username'])) {...} ?> 

有人在检查是否设置了变量时会解释其中的区别(这就是我要使用的变量)吗?

3 个答案:

答案 0 :(得分:10)

在PHP中,如果变量不存在(“未设置”),那么PHP将吐出E_NOTICE错误,创建缺失的变量,并将其分配给NULL

如果您不希望脚本中充满恼人的错误消息,泄露有关您的服务器和脚本的信息,请在尝试访问值之前使用isset()进行测试。

基本上,你要求PHP从username中获取$_SESSION而PHP就像是,“没有username ”!

答案 1 :(得分:6)

根据PHP.net,isset()执行以下操作:

  

确定变量是否已设置且不为NULL。

写作时:

<?php  if($_SESSION['username']) {...} ?>

您正在检查$ _SESSION ['username']是否等于true。换句话说,您正在检查该值是否不等于false。

根据PHP.net,以下内容被视为FALSE:

  

转换为布尔值时,以下值被视为FALSE:

the boolean FALSE itself
the integer 0 (zero)
the float 0.0 (zero)
the empty string, and the string "0"
an array with zero elements
an object with zero member variables (PHP 4 only)
the special type NULL (including unset variables)
SimpleXML objects created from empty tags

如您所见,未设置的变量/ NULL变量被视为FALSE。因此,通过测试$ _SESSION元素是否为true,您还可以确定它是否存在。

另一方面,Isset实际检查变量是否存在。如果您想知道该名称是否存在SESSION变量,请使用isset()作为测试它,因为TRUE / FALSE不依赖于变量是否存在。

此外,请看以下示例:

$_SESSION['a'] = FALSE;
if($_SESSION['a']){
echo 'Hello'; //This line is NOT echo'd.
}

if(isset($_SESSION['b'])){
echo 'Hello'; //This line is NOT echo'd because $_SESSION['b'] has not been set.
}

答案 2 :(得分:3)

假设您将变量设置为false ...

$variable = false;

这不会返回任何内容,因为它确保变量不为null,false或为空('')......

if($variable){
    echo'something';
}

无论我们将变量设置为什么,这都会起作用,只要我们设置它...它可以是false,str,int,除null之外的任何东西!

if(isset($variable)){
    echo'something';
}