在下面的例子爲什麼__get在返回之前忽略回顯時無效?
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;
輸出是:
Mario
__get called!
No such variable!
...讓我困惑,我的理解是 「叫__get!」當$ employee-> name被接受時出現,但爲什麼即使$ employee-> age被接受也不會出現?我的意思是......它在那裏,但似乎__get只考慮if-else語句中的返回值。這怎麼可能?
觀察:當__get在檢測到$ age時不會存在時運行,但是當它運行時,它爲什麼不在其中工作?
結論:「__get叫!」由於__get的一次調用而出現,其中$ employee-> age被讀取。
它確實有效。當您看到「__get called!」時,由於您正在訪問不可訪問的屬性(「age」),因此會出現這種迴應。 '$ name'是一個可公開訪問的屬性,這就是爲什麼'__get()'甚至不會在該行上調用。 – 2012-02-20 19:37:27