首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >` `if (isset($_SESSION))`和` `if ($_SESSION)`的区别?

` `if (isset($_SESSION))`和` `if ($_SESSION)`的区别?
EN

Stack Overflow用户
提问于 2012-05-08 07:50:10
回答 3查看 42K关注 0票数 7

我注意到人们经常会简单地写下

代码语言:javascript
运行
复制
<?php  if($_SESSION['username']) {...} ?>

虽然我一直在使用:

代码语言:javascript
运行
复制
 <?php if(isset($_SESSION['username'])) {...} ?> 

有人能解释一下检查是否设置了变量时的区别吗(这就是我要用它来做的事情)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-08 08:17:20

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

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

在写的时候:

代码语言:javascript
运行
复制
<?php  if($_SESSION['username']) {...} ?>

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

根据PHP.net的说法,以下内容被认为是错误的:

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

代码语言:javascript
运行
复制
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测试并不依赖于该变量是否存在。

此外,请看以下示例:

代码语言:javascript
运行
复制
$_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.
}
票数 8
EN

Stack Overflow用户

发布于 2012-05-08 07:51:34

在PHP中,如果一个变量不存在(是"unset"),那么PHP将生成一个E_NOTICE错误,创建缺失的变量,并将其赋值给NULL

如果您不希望您的脚本中充满令人讨厌的错误消息,这些消息会泄漏有关您的服务器和脚本的信息,那么在尝试访问某个值之前,请使用isset()进行测试。

基本上,你是在要求PHP从$_SESSION中取出username,PHP就像是,“没有username"!

票数 10
EN

Stack Overflow用户

发布于 2012-05-08 08:05:18

假设您将一个变量=设置为false...

代码语言:javascript
运行
复制
$variable = false;

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

代码语言:javascript
运行
复制
if($variable){
    echo'something';
}

无论我们将变量设置为什么,只要我们将其设置为...它可以是false,str,int,除null以外的任何值!

代码语言:javascript
运行
复制
if(isset($variable)){
    echo'something';
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10490678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档