我使用的是魔术的getter / setter类我的会话变量,但我没有看到正常的getter和setter方法有什么区别。

代码:

class session
{
    public function __set($name, $value)
    {
        $_SESSION[$name] = $value;
    }

    public function __unset($name)
    {
        unset($_SESSION[$name]);
    }

    public function __get($name)
    {
        if(isset($_SESSION[$name]))
        {
            return $_SESSION[$name];
        }
    }
}

现在我注意到的第一件事是,我要呼吁$session->_unset('var_name')删除的变量,没有什么“神奇”有关。

其次,当我尝试使用$session->some_var这不起作用。我只可使用$_SESSION['some_var']获取会话变量。

我已经看过PHP手册但功能看起来一样矿。

我做得不对,或者是有没有真正神奇的东西有关这些功能。

有帮助吗?

解决方案

第一个问题,当你调用

unset($session->var_name);

它应该是与调用

$session->_unset('var_name');

关于不能够使用__get();什么不起作用?什么变量获取设置并警告内容中给出。确保已设置 error_reporting() 以E_ALL。

这也可能是检查你调用 session_start

其他提示

我想getter和setter者为类内部变量?

class SomeClass {
    private $someProperty;

    function __get($name) {
        if($name == 'someProperty') return $this->someProperty;
    }

    function __set($name, $value) {
        if($name == 'someProperty') $this->someProperty = $value;

    }
}


$someClass = new SomeClass();
$someClass->someProperty = 'value';
echo $someClass->someProperty;

class session { /* ...as posted in the question ... */ }

session_start();
$s = new session;
$s->foo = 123;
$s->bar = 456;
print_r($_SESSION);

unset($s->bar);
print_r($_SESSION);

打印

Array
(
    [foo] => 123
    [bar] => 456
)
Array
(
    [foo] => 123
)

确定,也许不是 “神奇”。但是,按预期工作。结果 如果这不是你想要的请详细说明...

这是我的理解至今约神奇的功能

请纠正我,如果我错了......

<强> $ SESSION是一个数组而非对象 因此可以使用$会话[“字段”]和不会话而$>访问它们字段

神奇的功能让你的任何函数之前使用函数名__fnName

fnNameNewField($值);

因此,它将被分离成作为新野密钥和将被发送到__fnName和算子的研究将完成在此

例如: setNewId($值)将与键被发送到__set()= NEW_ID和参数...

scroll top