Сессия PHP, почему массив установлен в 1 - PullRequest
1 голос
/ 14 февраля 2012

Я создаю класс уведомлений, который использует сеанс для хранения сообщений. Мне нужно создать их как многомерный массив, чтобы я мог использовать различные «пространства имен», чтобы сообщения не отображались на неправильных страницах.

Вот пример:

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

1 Ответ

0 голосов
/ 14 февраля 2012

Вы смешиваете побитовый оператор с опорным оператором. В вашем методе update_session () используется неправильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...