我正在阅读这本电子书,从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上是否有一些配置设置需要修改以使其正常工作?有人可以帮忙解释一下吗?
答案 0 :(得分:1)
__get()
。现在,有一个名为name
的属性,因此不会调用您的魔法。将var $name
更改为private $name
即可。
答案 1 :(得分:0)
好的,我想我找到了答案。根据php docs
必须将所有重载方法定义为公共。
所以将魔术方法公之于众
public function __get() {}