我发现了一个与 $_SESSION 变量有关的奇怪特性
class A
{
static function doSomething()
{
$_SESSION['foo'] = 'bar';
}
}
A::doSomething();
var_dump($_SESSION);
正如您所猜测的那样,会话并没有开始,但$_SESSION变量已经初始化。谁能解释一下实际发生了什么?
我发现了一个与 $_SESSION 变量有关的奇怪特性
class A
{
static function doSomething()
{
$_SESSION['foo'] = 'bar';
}
}
A::doSomething();
var_dump($_SESSION);
$_SESSION是一个超全局变量,因此无需调用session_start()
即可访问。
此外,您无需初始化$_SESSION数组。
$_SESSION = array();
像使用其他数组一样使用它
$_SESSION['foo'] = 'bar';
$_SESSION
是一个超级全局数组:
默认情况下,所有的超级全局变量都是可用的...
因此,您可以随时访问该数组。即使没有 POST 请求,这也可以起作用,但您可以执行 $_POST['foo'] = 'bar'
。
当您尝试转到示例中未调用 A::doSomething 的另一页时,您会发现 echo $_SESSION['foo'];
会抛出错误,因为您没有调用 session_start();
。
_SESSION
未定义,但你仍可以将其作为超全局变量写入。PHP会话模块会在请求之间保留这些值(即session_start()
)。 - Explosion Pills