6

这是我的代码:

<?php

class SampleClass {

    public function __get($name){
        echo "get called";
        echo $name;
    }

    public function __set($name, $value) {
        echo "set called";
    }

}

?>

还有我的索引文件:

$object = new SampleClass();
$object->color = "black";
echo $object->color;

如果我按原样运行此代码,则输出如下:

设置调用调用颜色

但是,如果我注释掉

public function __set($name, $value) {
    echo "set called";
}

上面的部分(只有这部分),那么输出将是:

黑色的

那么这里发生了什么?

4

2 回答 2

4

__get只会在不存在属性的情况下被调用。通过删除__set,您在设置时创建了一个属性,因此__getphp 不调用 ,而是返回该属性。

一种简单的思考方式__get__set错误处理程序 - 当 php 无法以其他方式满足您的请求时,它们会启动。

于 2013-01-28T21:36:50.820 回答
3

这是对正在发生的事情的解释。在你的第一个例子中。您从未将值存储在对象中,也不存在已声明的属性。这echo $object->color;实际上从不做任何事情,因为没有返回任何内容__get

在第二个示例中,您为对象中的属性分配了一个值。由于您没有在对象中声明该属性,因此默认情况下它被创建为公共的。由于它是公开的,__get因此在访问它时永远不会被调用。

于 2013-01-28T21:42:09.693 回答