簡體   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