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 called!" $ employee-> ageが読み込まれる__getという1回の呼び出しのために現れました。
動作します。あなたが "__get called!"と表示されたら、それはアクセス不可能なプロパティ( 'age')にアクセスしているためにエコーされています。 '$ name'は一般にアクセス可能なプロパティなので、' __get() 'は決してその行に呼び出されません。 –