PHP静态方法初始化 $_SESSION 变量?

3

我发现了一个与 $_SESSION 变量有关的奇怪特性

class A
{
    static function doSomething()
    {
        $_SESSION['foo'] = 'bar';
    }
}

A::doSomething();

var_dump($_SESSION);

正如您所猜测的那样,会话并没有开始,但$_SESSION变量已经初始化。谁能解释一下实际发生了什么?

什么是输出?你期望什么?有什么问题? - Kerrek SB
2个回答

2

$_SESSION是一个超全局变量,因此无需调用session_start()即可访问。

此外,您无需初始化$_SESSION数组。

$_SESSION = array();

像使用其他数组一样使用它

$_SESSION['foo'] = 'bar';

1

$_SESSION 是一个超级全局数组:

默认情况下,所有的超级全局变量都是可用的...

因此,您可以随时访问该数组。即使没有 POST 请求,这也可以起作用,但您可以执行 $_POST['foo'] = 'bar'

当您尝试转到示例中未调用 A::doSomething 的另一页时,您会发现 echo $_SESSION['foo']; 会抛出错误,因为您没有调用 session_start();


$_SESSION默认未定义。我在这段代码中没有调用session_start!这是整个代码。 - misha
3
虽然默认情况下_SESSION未定义,但你仍可以将其作为超全局变量写入。PHP会话模块会在请求之间保留这些值(即session_start())。 - Explosion Pills

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接