PHP:别名$_SESSION变量

因为我注意到它是一个我不断重新实现的模式,所以我创建了一个DataContainer类来覆盖__set,__ get,__ isset,__ unset,并实现了ArrayAccess,Countable,IteratorAggregate和Serializable

例如,以MVC方式呈现PHP模板的View类继承自DataContainer,因此它重载了对提供给模板的数据的访问权限.

现在,我发现自己想要创建一个Session类来抽象PHP的低级会话处理.我发现这个Session类几乎可以完成DataContainer所做的一切,事实上,它是一个DataContainer – 它保存数据.

但是,如果我从DataContainer继承,那么所有重载的调用都会转到它的私有$_data数组.当然,我可以覆盖DataContainer的public get($key),public set($key,$val)等方法,但我唯一要做的就是将$this-> _data重命名为$_SESSION.

是否可以将变量设置为对$_SESSION等特殊全局的引用?

class Session extends DataContainer {
    //singleton stuff
    private function __construct() {
        $this->_data =& $_SESSION;
    }
}

这样做甚至是个好主意吗?如果没有,你有什么建议?

最佳答案

Is it possible to set a variable as a
reference to a special global like
$_SESSION?

是的,$this-> _data =& $_SESSION;

Is it even a good idea to do this?

我不明白为什么不这样做,有人可能会说通过引用将数据传递给构造函数可能更好,这样它就可以用于任何数组而不仅仅是session.

因此,是的.

编辑:作为一个侧面点,记住你并不总是有一个会话,有时候你在cli上运行等等,我个人有自己的会话对象(只是像你这样的DataContainer)然后我会在需要的地方坚持$_SESSION,或者文件或.. – 即我在$_SESSION中保存(有状态的)会话对象,而不是使用$_SESSION作为会话数据,如果这是有意义的..

点赞