关于PHP Magic方法__get和__set继承

Ram*_* K. 4 php oop inheritance magic-methods

OBS:我在这里直接编码,因为我的代码要复杂得多.

如果我编码:

class SuperFoo {
    public function __get($name) {
        return $this->$name;
    }
    public function __set($name, $value) {
        $this->$name = $value;
    }
}

class Foo extends SuperFoo {
    private $bar = '';
}

$foo = new Foo();
$foo->bar = "Why it doesn't work?";
var_dump($foo);
Run Code Online (Sandbox Code Playgroud)

结果是:

object(Foo) {
    ["bar":"Foo":private]=> 
        string(0) ''
}
Run Code Online (Sandbox Code Playgroud)

而不是:

object(Foo) {
    ["bar":"Foo":private]=> 
        string(20) 'Why it doesn't work?'
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我不想使用数组来保存属性,因为我需要将它们声明为单独的私有成员.

web*_*ave 5

您的代码应该导致致命错误,因为您正在尝试访问私有属性.在此之前,您应该收到语法错误,因为您没有正确声明您的函数.因此,你"结果"var转储永远不会发生.

编辑:

你已经编辑了你的问题.它不起作用的原因是因为它bar是私有的Foo(SuperFoo无法访问它).让它protected来代替.