PHP Session,为什么数组设置为1

发布于 2025-01-05 08:12:25 字数 1400 浏览 0 评论 0原文

我正在创建一个使用会话来存储消息的通知类。我需要将它们创建为多维数组,这样我就可以利用不同的“命名空间”,从而防止消息显示在错误的页面上。

这是一个示例:

print_r($_SESSION)
Array
(
    [EVENT_CMS] => Array
    (
        [Notifier] => Array
        (
            [0] => 'Your settings have been saved.'
            [1] => 'You must re-upload...'
        )
    )
)

现在在设置页面上,这些消息将通过调用正确的方法来打印。

我在类中设置消息容器时遇到问题。这就是我的构造函数的样子:(

public function __construct($namespace = 'Notifier') {
    $this->_session_start();

    if(defined('SESSION_NAMESPACE')){
        $this->notifications =& $_SESSION[SESSION_NAMESPACE][$namespace];
    } else {
        $this->notifications =& $_SESSION[$namespace];
    }
}

定义了 SESSION_NAMESPACE 常量,因此执行了 true 块。)

$Notify = new Notifier();
$Notify->add($_GET['test']);

print_r($_SESSION);

上面的代码生成了这个数组:

$_SESSION
Array
(
    [EVENT_CMS] => Array
    (
        [Notifier] => 1
    )

)

add message 方法应该更新会话,对吗?既然通知数组是一个参考?对 update_session() 的调用对输出没有影响...

public function add($message, $class = NULL) {
    $message_node = $message;
    $this->notifications[] = $message_node;

    $this->update_session();
}

public function update_session(){
    $this->SESSION[$this->namespace] &= $this->notifications;
}

I am creating a notification class which uses the session to store messages. I need to create them as a multidimensional array, so I can take advantage of different 'namespaces', so as to keep messages from displaying on the wrong pages.

Here is an example:

print_r($_SESSION)
Array
(
    [EVENT_CMS] => Array
    (
        [Notifier] => Array
        (
            [0] => 'Your settings have been saved.'
            [1] => 'You must re-upload...'
        )
    )
)

Now on the settings page, these messages will print with a call to the proper method.

I am having trouble setting up the message container within the class. This is what my constructor looks like:

public function __construct($namespace = 'Notifier') {
    $this->_session_start();

    if(defined('SESSION_NAMESPACE')){
        $this->notifications =& $_SESSION[SESSION_NAMESPACE][$namespace];
    } else {
        $this->notifications =& $_SESSION[$namespace];
    }
}

(The SESSION_NAMESPACE constant is defined, so the true block is executed.)

$Notify = new Notifier();
$Notify->add($_GET['test']);

print_r($_SESSION);

The above code yields me this array:

$_SESSION
Array
(
    [EVENT_CMS] => Array
    (
        [Notifier] => 1
    )

)

The add message method should update the session, right? Since the notifications array is a reference? The call to update_session() has no effect on the output...

public function add($message, $class = NULL) {
    $message_node = $message;
    $this->notifications[] = $message_node;

    $this->update_session();
}

public function update_session(){
    $this->SESSION[$this->namespace] &= $this->notifications;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

看春风乍起 2025-01-12 08:12:25

您将按位运算符与引用运算符混淆了。 update_session() 方法中使用了错误的方法。

You are mixing up the bitwise operator with the reference operator. The wrong one is used in your update_session() method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文