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
.