Matt Zandstra 在他的文章“PHP Objects Patterns and Practice”中给出了以下示例来说明 __get() 方法:
class Person {
function __get( $property ) {
$method = "get{$property}";
if ( method_exists( $this, $method ) ) {
return $this->$method();
}
}
function getName() {
return "Bob";
}
function getAge() {
return 44;
}
}
实际上,我们知道我们永远不会真正创建此类方法(getName 和 getAge)来返回此类静态值,而是 - 我们将在对象中创建名称和年龄属性并使用 $this 运算符返回这些属性。
我的问题是这个例子是否真的显示了实用性。如果没有,有人可以提供一个更好的例子来说明为什么人们会出于同样的目的使用 __get() 吗?
询问的理由
如果我们要在对象中使用姓名和年龄属性,那么无论如何都不会触发 __get() 函数,因为试图通过以下方式获取这些属性:
$person = new Person();
$name = $person->name;
如果 name 属性是公共的,则会导致实际返回,或者如果它是私有的或受保护的,则会导致可见性错误。__get() 函数在这两种“真实”情况下都不会执行……我错过了什么吗?
我完全知道上面的代码有效。我不相信这是一个实际的例子。