Магические методы PHP __get и __set

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

82
задан idmean 20 October 2014 в 13:09
поделиться