我注意到人们经常会简单地写下
<?php if($_SESSION['username']) {...} ?>
虽然我一直在使用:
<?php if(isset($_SESSION['username'])) {...} ?>
有人能解释一下检查是否设置了变量时的区别吗(这就是我要用它来做的事情)?
发布于 2012-05-08 08:17:20
根据PHP.net的说法,isset()执行以下操作:
确定变量是否已设置且不为NULL。
在写的时候:
<?php if($_SESSION['username']) {...} ?>
您正在检查$_SESSION‘’username‘是否等于true。换句话说,您正在检查该值是否不等于false。
根据PHP.net的说法,以下内容被认为是错误的:
当转换为布尔值时,以下值被视为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
正如您所看到的,unset变量/ NULL变量被认为是FALSE。因此,通过测试$_SESSION元素是否为真,您还可以确定它是否存在。
另一方面,Isset实际上检查变量是否存在。如果您想知道是否有该名称的会话变量,请使用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.
}
发布于 2012-05-08 07:51:34
在PHP中,如果一个变量不存在(是"unset"),那么PHP将生成一个E_NOTICE
错误,创建缺失的变量,并将其赋值给NULL
。
如果您不希望您的脚本中充满令人讨厌的错误消息,这些消息会泄漏有关您的服务器和脚本的信息,那么在尝试访问某个值之前,请使用isset()
进行测试。
基本上,你是在要求PHP从$_SESSION
中取出username
,PHP就像是,“没有username
"!
发布于 2012-05-08 08:05:18
假设您将一个变量=设置为false...
$variable = false;
这不会返回任何内容,因为它确保变量不是null、false或空(‘’)...
if($variable){
echo'something';
}
无论我们将变量设置为什么,只要我们将其设置为...它可以是false,str,int,除null以外的任何值!
if(isset($variable)){
echo'something';
}
https://stackoverflow.com/questions/10490678
复制相似问题