2012-02-13 15 views
1

セッションを使用してメッセージを格納する通知クラスを作成しています。私はそれらを多次元配列として作成する必要があるので、メッセージを間違ったページに表示しないように、異なる '名前空間'を利用することができます。ここでPHPセッション、配列が1に設定されている理由

は一例です。

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; 
} 
+0

ここで、アレイをセッションに保存しますか? –

+0

この例は不完全です。完全なコードを表示すれば、簡単に答えることができます。他の場所でセッション変数にアクセスするかどうかは不明です。 –

+0

@DavidChan - 質問を関連するコードで更新しました。メッセージはセッション配列そのものに格納する必要があります。 – AVProgrammer

答えて

0

ビット演算子と参照演算子を混在させています。間違ったものがupdate_session()メソッドで使用されます。

+0

私はadd()メソッドに文字列を渡して、それを通知配列に割り当てます。どの機能を参照していますか? – AVProgrammer

+0

私はadd()とupdate_session()の内部が見えるようになりました。 – Landstander

関連する問題