0

我正在阅读这本电子书,Beginning PHP5 and Mysql: From Novice to Professional,在 OOP 部分,我正在尝试使用此示例代码在我的计算机上与本书中重现相同的结果。

class Staff
{
var $name;
var $city;
protected $wage;
    function __get($propName)
    {
        echo "__get called!<br />";
        $vars = array("name","city");
        if (in_array($propName, $vars))
        {
        return $this->$propName;
        } else {
        return "No such variable!";
        }
    }
}
$employee = new Staff();
$employee->name = "Mario";
echo $employee->name."<br />";
echo $employee->age;

在书中 - 结果显示为:

Mario
__get called!
No such variable!

但在我的电脑上:

Mario

只有第一行。另外两行被“忽略”。这是为什么?!?!

我的 php.ini 上是否有一些配置设置需要修改才能使其正常工作?有人可以帮忙解释一下吗?

4

2 回答 2

1

__get()只有非公共不存在的属性才会被调用。现在,有一个名为 的属性name,所以你的魔法方法不会被调用。换成它会起作用的var $nameprivate $name

于 2012-04-13T15:03:13.553 回答
0

好的,我想我找到了答案。根据 php 文档

所有重载方法都必须定义为公共的。

所以把魔法方法公开

public function __get() {}
于 2012-04-13T14:57:13.333 回答