繁体   English   中英

如何使PHP的Magic __set像自然变量一样工作?

[英]How do I make PHP's Magic __set work like a natural variable?

基本上,我想做的是创建一个名为Variables的类,该类使用会话在其中存储所有内容,从而使我可以快速获取和存储需要在整个站点中使用的数据,而无需直接使用会话。

现在,我的代码如下所示:

<?php
    class Variables
    {
            public function __construct()
            {
                    if(session_id() === "")
                    {
                            session_start();
                    }
            }
            public function __set($name,$value)
            {
                    $_SESSION["Variables"][$name] = $value;
            }
            public function __get($name)
            {
                    return $_SESSION["Variables"][$name];
            }
            public function __isset($name)
            {
                    return isset($_SESSION["Variables"][$name]);
            }
    }

但是,例如,当我尝试像自然变量一样使用它时...

$tpl = new Variables;
$tpl->test[2] = Moo;
echo($tpl->test[2]);

我最终得到“ o”而不是“ Moo”,因为它将测试设置为“ Moo”,完全忽略了数组。 我知道我可以通过解决它

$tpl->test = array("Test","Test","Moo");
echo($tpl->test[2]);

但我希望能够像自然变量一样使用它。 这可能吗?

您将要使__get通过引用返回:

<?php
class Variables
{
        public function __construct()
        {
                if(session_id() === "")
                {
                        session_start();
                }
        }
        public function __set($name,$value)
        {
                $_SESSION["Variables"][$name] = $value;
        }
        public function &__get($name)
        {
                return $_SESSION["Variables"][$name];
        }
        public function __isset($name)
        {
                return isset($_SESSION["Variables"][$name]);
        }
}

$tpl = new Variables;
$tpl->test[2] = "Moo";
echo($tpl->test[2]);

给出“ Moo”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM