代码之家  ›  专栏  ›  技术社区  ›  Austin Hyde

PHP:给$会话变量取别名

php
  •  4
  • Austin Hyde  · 技术社区  · 16 年前

    因为我注意到这是一个我不断重新实现的模式,所以我创建了一个覆盖 __set __get , __isset , __unset ,和工具 ArrayAccess , Countable , IteratorAggregate ,和 Serializable

    现在,我发现自己想要创建一个Session类来抽象PHP的低级会话处理。我突然想到,这个Session类几乎可以完成DataContainer所做的一切,事实上, is-a公司 DataContainer—它保存数据。

    但是,如果我从DataContainer继承,那么所有重载调用都将转到其 private $_data public get($key) , public set($key,$val) $this->_data $_SESSION .

    是否可以设置一个变量作为对特殊全局变量的引用 ?

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

    甚至是一个 好主意

    2 回复  |  直到 16 年前
        1
  •  1
  •   nathan    16 年前

    引用一个特殊的全局类 $\u会话?

    $this->_data =& $_SESSION;

    这样做是个好主意吗?

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

    因此,是的。

    编辑:作为一个补充,记住你并不总是有一个会话,有时你在cli上运行等,我个人有我自己的会话对象(只是一个像你一样的数据容器),然后我在需要的地方保存到$\u会话,或文件或ie我在$会话中保存(有状态的)会话对象,而不是使用$会话作为会话数据,如果这有意义的话。。

        2
  •  1
  •   Wrikken    16 年前

    我当然希望这是个好主意,因为我经常用它。有点像 Decorator ,仅适用于变量容器。是的,它已经工作了大约3年了,我非常喜欢它;跟踪它在更复杂的项目中产生的功能。记住你不能 使用容器而不是 $_SESSION ,但当大多数代码使用其他方法时,对该特定字符串的项目范围搜索会产生快速结果。

    我也做了一个 Singleton 对于那些时刻,一个项目不适合合适的依赖注入路径,无论是由于规模、时间还是历史原因。引用 Session::instance() 就像 超全球化。

    推荐文章