我注意到人们常常只写
<?php if($_SESSION['username']) {...} ?>
我一直在使用:
<?php if(isset($_SESSION['username'])) {...} ?>
有人在检查是否设置了变量时会解释其中的区别(这就是我要使用的变量)吗?
答案 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';
}