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