gpt4 book ai didi

php - __get() 示例来自 Zandstra

转载 作者:搜寻专家 更新时间:2023-10-31 21:44:41 24 4
gpt4 key购买 nike

Matt Zandstra 在他的课本“PHP 对象模式与实践”中给出了以下示例来说明 __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() 来达到同样的目的吗?

提问的理由

如果我们要在对象中使用 name 和 age 属性,那么无论如何都不会触发 __get() 函数,因为试图通过以下方式获取这些属性:

$person = new Person();
$name = $person->name;

如果 name 属性是公共(public)的,将导致实际返回,或者如果它是私有(private)的或 protected ,则会导致可见性错误。 __get() 函数在这两种“真实”情况下都不会执行……我是不是遗漏了什么?

我完全知道上面的代码有效。我不相信这是一个实际的例子。

最佳答案

你完全正确 - 你引用一本书给我留下了深刻的印象,那个例子简直糟透了。

使用魔法 __get 方法来调用方法是错误的,还有其他魔法方法就是为了这种用法:

  • __call()
  • __callStatic()
  • __invoke()

__get()__set() 应该用于读取和写入未声明的对象属性

关于php - __get() 示例来自 Zandstra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5811619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com