【问题标题】:PHP static method init $_SESSION var?PHP静态方法初始化$_SESSION var?
【发布时间】:2011-07-23 00:09:21
【问题描述】:

我发现 $_SESSION var 有一个奇怪的功能

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

A::doSomething();

var_dump($_SESSION);

你可能猜到会话没有开始但是 $_SESSION 变量被初始化了。谁能解释一下到底发生了什么?

【问题讨论】:

  • 输出是什么?你期待什么?有什么问题?

标签: php session static-methods


【解决方案1】:

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

另外,您不需要初始化 $_SESSION 数组

$_SESSION = array();

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

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

【讨论】:

    【解决方案2】:

    $_SESSIONsuperglobal array

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

    所以你可以随时访问这个数组。这在没有 POST 请求时也可以工作,但您可以使用 $_POST['foo'] = 'bar'

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

    【讨论】:

    • $_SESSION 默认未定义。我没有在这段代码中调用 session_start !这是一个完整的代码。
    • 即使 _SESSION 默认未定义,您仍然可以将变量作为超全局变量写入。是 php 会话模块在请求之间保留这些值(即session_start()
    猜你喜欢
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多