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

d-_*_*_-b 6 php if-statement isset

我注意到人们常常只是写作

<?php  if($_SESSION['username']) {...} ?>
Run Code Online (Sandbox Code Playgroud)

我一直在使用:

 <?php if(isset($_SESSION['username'])) {...} ?> 
Run Code Online (Sandbox Code Playgroud)

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

Xeo*_*oss 10

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

如果您不希望脚本中充满烦人的错误消息,这些消息会泄漏有关您的服务器和脚本的信息 - 那么isset()在尝试访问值之前请先测试一下.

基本上,你要求PHP username退出,$_SESSIONPHP就像" 没有username "!

  • @DankPiff,基本上,如果你知道**超出了怀疑的阴影**,那个变量存在(因为你刚刚创建它),那么你可以像`if($ var)`那样直接使用它.如果您不确定,那么您需要首先使用`if(isset($ var))`或`if(empty($ var))`进行测试,以便PHP知道缺少的值是*ok*并且您不需要令人讨厌的错误消息. (2认同)

noa*_*hnu 7

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

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

写作时:

<?php  if($_SESSION['username']) {...} ?>
Run Code Online (Sandbox Code Playgroud)

您正在检查$ _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
Run Code Online (Sandbox Code Playgroud)

如您所见,未设置的变量/ 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.
}
Run Code Online (Sandbox Code Playgroud)