我正在阅读 W. Jason Gilmore 所著的“Beginning PHP and MYSQL”一书,遇到了对我来说没有意义的部分。这是关于 OOP 中的访问器和修改器的部分。
class Employee
{
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 Employee();
$employee->name = "Mario";
echo $employee->name."<br />";
echo $employee->age;
这将返回以下内容:
马里奥__打电话!没有这样的变量!
我遇到的第一个问题是,当 name 属性设置为“Mario”时,访问器方法没有运行,我做了一些搜索,似乎 __get 仅在从不可访问的属性中读取数据时运行,尽管这从来没有书上说的。这就是为什么不运行 __get 方法的原因吗?
我遇到的第二个问题与“if”语句有关。如果 __get 仅在尝试从不可访问的属性中读取时才真正运行,为什么您会在其中包含一个“if”来检查该属性是否已经在您设置的变量数组中?当然不会,或者你不会得到“如果”,对吗?