2012-02-13 84 views
1

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

下面是一个例子:

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

现在在设置页面上,这些消息将会以适当的方法的调用打印。

我在设置类中的消息容器时遇到了问题。这是我的构造是什么样子:(该SESSION_NAMESPACE常量的定义,因此执行真正块)

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

    if(defined('SESSION_NAMESPACE')){ 
     $this->notifications =& $_SESSION[SESSION_NAMESPACE][$namespace]; 
    } else { 
     $this->notifications =& $_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; 
} 
+0

你在哪里将数组存储到会话中? – 2012-02-13 20:16:24

+0

该示例不完整。显示完整的代码,它会更容易回答。如果您在其他地方访问会话变量,这并不明显。 – 2012-02-13 20:18:58

+0

@DavidChan - 我用相关代码更新了问题;这些消息应该存储在会话数组本身中。 – AVProgrammer 2012-02-13 20:30:46

回答

0

您正在将参考运算符与位运算符混合在一起。在你的update_session()方法中使用错误的。

+0

我将一个字符串传递给add()方法,并将其分配给通知数组。你指的是什么功能? – AVProgrammer 2012-02-13 20:40:55

+0

我已经更新了我的答案,现在我看到了add()和update_session()的内部结构。 – Landstander 2012-02-13 21:15:40

相关问题