7

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

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

虽然我一直在使用:

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

有人可以在检查是否设置变量时解释差异(这就是我使用它的目的)吗?

4

3 回答 3

10

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

如果您不希望您的脚本充满恼人的错误消息,这些错误消息会泄漏有关您的服务器和脚本的信息 - 然后isset()在尝试访问值之前使用测试。

基本上,您是在要求 PHPusername退出,$_SESSION而 PHP 就像是“没有username”!

于 2012-05-07T23:51:33.803 回答
8

根据 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 元素是否为真,您还可以确定它是否存在。

另一方面,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.
}
于 2012-05-08T00:17:19.920 回答
3

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

$variable = false;

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

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

无论我们将变量设置为什么,只要我们设置它,这将起作用……它可以是 false、str、int,除了 null 之外的任何值!

if(isset($variable)){
    echo'something';
}
于 2012-05-08T00:05:17.503 回答