Если я не ошибаюсь, методы __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
.