Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 普通二传手和魔术二传手的区别_Php_Getter Setter_Magic Function - Fatal编程技术网

Php 普通二传手和魔术二传手的区别

Php 普通二传手和魔术二传手的区别,php,getter-setter,magic-function,Php,Getter Setter,Magic Function,我正在为会话变量使用一个神奇的getter/setter类,但我看不到普通setter和getter之间有什么区别 守则: class session { public function __set($name, $value) { $_SESSION[$name] = $value; } public function __unset($name) { unset($_SESSION[$name]); }

我正在为会话变量使用一个神奇的getter/setter类,但我看不到普通setter和getter之间有什么区别

守则:

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->\u unset('var\u name')
来删除变量,这并没有什么“神奇”之处

其次,当我尝试使用
$session->some\u var
时,这不起作用。我只能使用
$\u session['some\u var']
获取会话变量

我看过PHP手册,但是函数看起来和我的一样


是我做错了什么,还是这些函数真的没有什么神奇之处。

我以为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;

第一期,当你打电话时

unset($session->var_name);
应该和打电话一样

$session->_unset('var_name');
关于不能使用_get();什么不起作用?变量设置为什么以及给出了什么警告。确保您已设置为E_ALL

检查一下你打过电话也可能是个好主意

印刷品

Array
(
    [foo] => 123
    [bar] => 456
)
Array
(
    [foo] => 123
)
好吧,也许不是“神奇的”。但效果与预期一致。

如果这不是您想要的,请详细说明…

这是我到目前为止对魔法函数的理解

如果我错了,请纠正我

$SESSION是一个数组,而不是一个对象 因此,您可以使用$session['field']而不是$session->field来访问它们

魔法函数允许您在任何函数之前使用函数名

fnNameNewField($value)

因此,它将被分割成NewField作为键,并将发送到_fnName,并在此基础上进行操作

例如:
setNewId($value)将被发送到uuu set(),key=new\u id和参数…

这是一个问题而不是答案。第二,神奇的功能就是这样。功能。它们可以访问的限制与普通函数相同,因此没有理由不能从外部源返回值。例如,条令从数据库获取和设置值。不,您不再需要在函数中定义变量。这是我理解的“魔力”的一部分。当你仅仅调用$someclass->variable=10;如果这个变量不存在,它会生成这个变量。哦,是的,集合和get正在工作。我在测试中引用了错误的变量+1并感谢您提供了unset方法的正确语法。将使用以下语法:unset($session->var_name);“如果没有魔法就不起作用吗?”赛义夫说,“不,没有。”。如果你想使用
unset
你必须定义
\uu unset
函数。至少如果没有这个u unset()方法,它不会对会话产生影响。好了,我现在明白了。我也会用它自己做一些测试。至少我现在知道我在正确的轨道上!是的,这就是我想要的。我在代码中犯了一些愚蠢的错误,很抱歉。这很好,只是unset的正确语法对我来说不清楚。然而,它是这样工作的。
Array
(
    [foo] => 123
    [bar] => 456
)
Array
(
    [foo] => 123
)