最佳答案
除非我完全错误,__get
和 __set
方法应该允许 get
和 set
的重载。
例如,下面的语句应该调用 __get
方法:
echo $foo->bar;
$var = $foo->bar;
下面应该使用 __set
方法:
$foo->bar = 'test';
这在我的代码中不起作用,并且可以通过这个简单的示例重现:
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]";
这只会导致:
[test]
把一些 die()
调用放在那里表明它根本没有击中它。
现在,我只是说,螺丝它,我手动使用 __get
的地方需要它现在,但这不是非常动态,需要知识的“重载”代码实际上是没有被调用,除非具体调用。我想知道这是不是不应该按照我理解的方式运行或者为什么不起作用。
这是在 php 5.3.3
上运行的。