PHP 5.6 не задана запись подмассива $_SESSION

Я получил следующую функцию:

public function stopWatcherSession($sessionID) {
    if(array_key_exists($sessionID, $_SESSION[self::WATCHER_SESSION_KEY])) {
        foreach ($_SESSION[self::WATCHER_SESSION_KEY][$sessionID]['names'] as $v) {
            $ptype = $this->paramTypeFromName($v);
            unset($_SESSION[self::SESSION_KEY][$ptype][$v]); //does not work, sets entry to null
        }
        unset($_SESSION[self::WATCHER_SESSION_KEY][$sessionID]); //does not work, sets entry to null
    }
}

Как говорится в комментариях, запись массива не сбрасывается, array_key_exists()-функция все еще возвращается true, и если вы var_dump($_SESSION) ты это видишь $_SESSION[self::WATCHER_SESSION_KEY][$sessionID] нулевой.

Как я могу сбросить переменную, чтобы также удалить ключ в массиве?

То, что я пытался, это не сработало:

// v1 (tried also for `$_SESSION[self::WATCHER_SESSION_KEY][$sessionID]` )
$tmp = $_SESSION[self::SESSION_KEY][$ptype];
unset($tmp[$v]);
$_SESSION[self::SESSION_KEY][$ptype] = $tmp;

//v2
unset($_SESSION[self::WATCHER_SESSION_KEY][$sessionID]);
session_write_close();
session_start();

//v3 => v1 & v2 combined
$tmp = $_SESSION[self::SESSION_KEY][$ptype];
unset($tmp[$v]);
$_SESSION[self::SESSION_KEY][$ptype] = $tmp;
session_write_close();
session_start();

Я мог бы добавить дрянной хак во всем коде, чтобы проверить, является ли это null, но затем "пустые" значения должны быть изменены на что-то другое (как предопределенный const, но это неприятный обходной путь и приводит к путанице для других разработчиков!)

У кого-нибудь есть идеи?

1 ответ

Получил это работает:

unset($GLOBALS['_SESSION'][self::WATCHER_SESSION_KEY][$sessionID]); делает работу

http://php.net/manual/en/function.unset.php говорит:

Поведение unset() внутри функции может варьироваться в зависимости от типа переменной, которую вы пытаетесь уничтожить. […] Чтобы снять () глобальную переменную внутри функции, используйте массив $GLOBALS, чтобы сделать это

Похоже, классическое поведение PHP не определено в некоторых случаях "- пример.

Другие вопросы по тегам