0

基本的に、私がやりたいことは、セッションを使用してすべてを格納する変数というクラスを作成することです。これにより、セッションを直接操作することなく、サイト全体で使用する必要があるデータをすばやく取得して格納できます。

現在、私のコードは次のようになっています。

<?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」に設定し、配列を完全に無視するため、「Moo」ではなく「o」を取得することになります。私はそれを回避できることを知っています

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

しかし、自然変数であるかのように使用できるようにしたいと考えています。これは可能ですか?

4

1 に答える 1

4

__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]);

「ムー」を与える。

于 2010-05-15T05:20:57.897 に答える