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

问题描述:

我正在阅读本电子书,从PHP5和Mysql开始:从新手到专业,在OOP部分,我试着用这个示例代码来重现我的相同结果电脑vs这本书。有这个令人费解的PHP 5 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中是否有一些配置设置需要修改才能使其工作?有人可以帮忙解释吗?

+0

最后一行应该是'echo $ employee-> wage;'? – bjudson 2012-04-13 03:38:22

+1

这是你的书吗? http://www.amazon.com/Beginning-PHP-MySQL-Novice-Professional/dp/1893115518它是8岁,显然使用PHP4。 – 2012-04-13 03:40:56

+0

@joeframbach:我的书和这个亚马逊链接具有相同的标题。我的书2006年版。它已经6岁了。 – awongCM 2012-04-13 03:56:47

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

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

所以使得魔术方法公开

public function __get() {} 

__get()只会被要求非公开不存在的性能。现在,有一个名为name的属性,所以你的魔法不会被调用。将var $name更改为private $name,它将起作用。