有这个令人费解的PHP 5 OOP查询

时间:2012-04-13 03:32:07

标签: php oop

我正在阅读这本电子书,从PHP5和Mysql开始:从新手到专业,在OOP部分,我正在尝试使用此示例代码在我的计算机上重现相同的结果vs这本书。

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上是否有一些配置设置需要修改以使其正常工作?有人可以帮忙解释一下吗?

2 个答案:

答案 0 :(得分:1)

只有非公开不存在的属性才会调用

__get()。现在,有一个名为name的属性,因此不会调用您的魔法。将var $name更改为private $name即可。

答案 1 :(得分:0)

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

  

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

所以将魔术方法公之于众

public function __get() {}