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

时间:2012-02-13 20:11:51

标签: php session

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

以下是一个例子:

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常量,因此执行了真正的块。)

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

print_r($_SESSION);

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

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

)

添加消息方法应该更新会话,对吧?由于通知数组是引用?对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;
}

1 个答案:

答案 0 :(得分:0)

您正在将按位运算符与引用运算符混合。在update_session()方法中使用了错误的一个。