Métodos mágicos __get e __set do PHP

A menos que eu esteja completamente enganado, o__get e__set métodos devem permitir a sobrecarga do →get eset.

Por exemplo, as seguintes instruções devem chamar o__get método:

echo $foo->bar;
$var = $foo->bar;

E o seguinte deve usar o__set método:

$foo->bar = 'test';

Isso não estava funcionando no meu código e é reproduzível com este exemplo simples:

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]";

Isso resulta apenas em:

[test]

Colocando algunsdie() chamadas lá mostram que não está atingindo nada.

Por enquanto, eu apenas disse que estrague tudo, e estou usando manualmente__get onde é necessário por enquanto, mas isso não é muito dinâmico e requer conhecimento de que o código 'sobrecarregado' na verdade não está sendo chamado, a menos que seja especificamente chamado. Eu gostaria de saber se isso não deveria funcionar da maneira que eu entendi que deveria ou por que isso não está funcionando.

Isso está sendo executado emphp 5.3.3.

questionAnswers(7)

yourAnswerToTheQuestion