有这个令人费解的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中是否有一些配置设置需要修改才能使其工作?有人可以帮忙解释吗?
答
好的我想我找到了答案。根据php文档
所有重载方法必须定义为公共。
所以使得魔术方法公开
public function __get() {}
答
__get()
只会被要求非公开或不存在的性能。现在,有一个名为name
的属性,所以你的魔法不会被调用。将var $name
更改为private $name
,它将起作用。
最后一行应该是'echo $ employee-> wage;'? – bjudson 2012-04-13 03:38:22
这是你的书吗? http://www.amazon.com/Beginning-PHP-MySQL-Novice-Professional/dp/1893115518它是8岁,显然使用PHP4。 – 2012-04-13 03:40:56
@joeframbach:我的书和这个亚马逊链接具有相同的标题。我的书2006年版。它已经6岁了。 – awongCM 2012-04-13 03:56:47