Nasıl PHP'nin Magic __ doğal bir değişken gibi iş kurmak yapabilirim?

1 Cevap php

Temelde, ne yapmak istiyorsanız bana hızlı bir şekilde almak ve oturumları ile doğrudan çalışma olmadan sitenin tamamı boyunca kullanılması gereken veri depolamak için izin, o her şeyi saklamak için oturumu kullanır Değişkenleri olarak adlandırılan bir sınıf oluşturmak olduğunu.

Şu anda, benim kod şöyle görünür:

<?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]);
            }
    }

Ancak, örneğin, doğal bir değişken gibi kullanmaya çalıştığınızda ...

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

O "Moo," tamamen dizi görmezden olmak testi setleri gibi yerine "Moo" nin "o" oluyor sonunda. Ben yaparak etrafında çalışabilirsiniz biliyorum

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

ama doğal bir değişken olduğu gibi kullanmak mümkün olmak istiyorum. Bu mümkün mü?

1 Cevap

Sen referans __ get dönüş yapmak isteyeceksiniz:

<?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" verir.