相关疑难解决方法(0)

PHP __get和__set魔术方法

除非我完全弄错了,否则这些__get__set方法应该允许重载→ getset.

例如,以下语句应调用该__get方法:

echo $foo->bar;
$var = $foo->bar;
Run Code Online (Sandbox Code Playgroud)

以下应该使用该__set方法:

$foo->bar = 'test';
Run Code Online (Sandbox Code Playgroud)

这在我的代码中不起作用,并且可以通过这个简单的示例重现:

class foo {

    public $bar;
    public function __get($name) {

        echo "Get:$name";
        return $this->$name;
    }

    public function __set($name, $value) {

        echo "Set:$name to $value";
        $this->$name = $value;
    }
}


$foo = new foo();

echo $foo->bar;
$foo->bar = 'test';

echo "[$foo->bar]";
Run Code Online (Sandbox Code Playgroud)

这只会导致:

[test]
Run Code Online (Sandbox Code Playgroud)

die()在那里打几个电话表明它根本没有打它.

现在,我只是说它,并且我手动使用__get它现在需要的地方,但这不是非常动态,并且需要知道"重载"代码实际上没有被调用,除非特别调用.我想知道这是不应该以我理解它应该或为什么这不起作用的方式起作用.

这是在运行php 5.3.3.

php magic-methods

82
推荐指数
5
解决办法
15万
查看次数

标签 统计

magic-methods ×1

php ×1