【问题标题】:How can I return an $_SESSION as opposed to the value of the $_SESSION?如何返回 $_SESSION 而不是 $_SESSION 的值?
【发布时间】:2014-08-29 09:53:54
【问题描述】:

我遇到了一个很容易解决的小问题,但让我想到了从函数返回 $_SESSION 的想法,而不是返回 $_SESSION 的 。例如,假设我想编写一个函数来取消设置 $_SESSION(我知道下面的示例很愚蠢,但我希望用它来说明一点)。

function sessionFunction($name) {

return $_SESSION[$name];

}

$session_to_unset = sessionFunction('unset_me');
unset($session_to_unset);

上述方法不起作用,因为我返回的是 $_SESSION 的 ,而不是返回 $_SESSION 本身。

当然,我可以这样做(再次......非常愚蠢的功能,但用来说明一点):

function sesssionFunction($name) {

return $name;

}

$session_to_unset = sessionFunction('unset_me');
unset($_SESSION[$name]);

但是,我想知道是否有一种方法可以实际返回 $_SESSION 数组而不是其填充值,以便我可以取消设置返回值(如第一个示例中所示)。

【问题讨论】:

  • 无论如何你都不能使用第一个语法unset($whatever)。 PHP就是这样。您可以通过利用魔术函数来设置其他可能的句法模式,但unset($whatever) 不能永远导致在其他地方修改内容。
  • 您可以通过编写适当的类来实现。像$foo = $session->get('foo'); $foo->remove(); 这样的东西是可能的,尽管可以说这很快就会让人困惑(例如,你删除了 foo,但仍然有它的对象)。简而言之,这并不是您真正应该开始使用的模式。
  • @Jon,这是我问题的核心。由于这个问题似乎没有“好的”答案,您能否将您的“评论”更改为“答案”,我会接受吗?
  • @Eric:我添加了一个答案。

标签: php function session


【解决方案1】:

您无法执行任何操作来启用直接的unset($var) 语法。这是因为 PHP 中没有钩子可以让您自定义 unset 的行为——有一个神奇的方法 __unset,但只有在对象属性上调用时才会发挥作用。

【讨论】:

  • 感谢您的帮助!
【解决方案2】:

$_SESSION 是一个“超全局”。来自documentation

这是一个“超全局”或自动全局变量。这仅仅意味着它在整个脚本的所有范围内都可用。没有必要做全局 $variable;在函数或方法中访问它。

没有必要退回它,因为它在任何地方都可以以正确的形式获得。

【讨论】:

  • 感谢您的评论!而且,我知道 $_SESSIONS 的全球性;然而,我的问题更多是关于返回 $_SESSION “事物”与“事物”的价值的概念......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
相关资源
最近更新 更多