Я создаю класс уведомлений, который использует сеанс для хранения сообщений. Мне нужно создать их как многомерный массив, чтобы я мог использовать различные «пространства имен», чтобы сообщения не отображались на неправильных страницах.
Вот пример:
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
)
)
Метод добавления сообщения должен обновлять сеанс, верно? Так как массив уведомлений является ссылкой? Вызов 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;
}