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();

我可以在整个代码中添加一个蹩脚的hack来检查它是否为null,但是然后"空"值必须更改为其他东西(如预定义的const,但这是一个讨厌的解决方案,并导致其他开发人员的困惑!)

有人有什么想法吗?

成功了:

unset($GLOBALS['_SESSION'][self::WATCHER_SESSION_KEY][$sessionID]);完成任务。

http://php.net/manual/en/function.unset.php表示:

函数内部unset()的行为可以根据您试图销毁的变量类型而变化。[…]要取消函数内部的全局变量设置,请使用$GLOBALS数组

看起来像一个经典的»PHP行为在某些情况下是未定义的«-example.

相关内容

  • 没有找到相关文章

最新更新