有人能解释一下重载__set和__get吗?


Could someone please explain overloading with __set and __get?`

我不知道在这里问这个问题是否合适,但我还是要问。最近我在Lynda.com上看了一个名为"PHP面向对象编程"的系列文章,其中有一部分是关于重载的。在本节中,他使用__get__set魔术方法。我完全不知道它们在做什么,更不知道Magic Methods的目的是什么。任何帮助都太好了!

__set__get在您试图设置或访问的属性未在您的类中定义或不可访问时调用。它们可以用于错误处理或其他目的(例如,像Eloquent ORM,它"神奇地"将表列映射到对象的属性)。

假设你有这样一个类:

class A {
    var $a = "I'm A<br/>";
    function __get($property)
    {
        echo "You tried to access '{$property}' which does not exist!<br/>";
    } // __get
    function __set($property, $value)
    {
        echo "You tried to set '{$property}' to '{$value}', but '{$property}' is not defined<br/>";
    } // __set
}

然后,执行以下操作来查看结果:

$a = new A();
echo $a->a;
$a->iDoNotExist;
$a->iDoNotExistEither = "boo!";