__get() 和 __set() 方法的意义是什么

What's the sense of the __get() & __set() methods

今天我读了一篇关于 MVC 的教程,那个家伙正在使用魔术方法 (__get & __set()) 来访问私有成员值。 (LINK) 起初我对 __get 和 __set 的作用感到困惑,但在浏览互联网后我终于发现,如果成员无法从外部访问,则会调用此方法。 到目前为止...

但是这样的代码是没有意义的:

class Foo {
    private $bar;

    public __set($value) {
        $this->bar = $value;
    }

    public __get() {
        return $this->bar;
    }
}

我想我可以使用正常的 getter 和 setter - IMO 是一种更容易理解的方式:

class Foo {
    private $bar;

    public setBar($value) {
        $this->bar = $value;
    }

    public getBar() {
        return $this->bar;
    }
}

如果您想使用 __get 和 __set 访问外部成员,您也可以将成员设置为 public - 所以我不明白这是什么意思。 你能告诉我(也许有一个例子)这两种方法的意义是什么吗?

您开发了您的程序,并且您认为您不必控制对您的属性的访问。因此,您将 public 而不是 private 。但是在维护期间,您意识到您需要更改 class 以施加约束以禁止属性为 0。要进行此更改,您需要添加一个 setter 并私下使用您的属性。结果:您需要将此更改影响所有 class 客户。

如果您从一开始就使用 setters 和 getteurs,维护会简单得多。