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