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 メソッドが実行されない理由ですか?
2 番目の質問は、「if」ステートメントに関するものでした。__get が本当にアクセスできないプロパティから読み取ろうとしたときにのみ実行されるのであれば、設定されている変数の配列にプロパティが既にあるかどうかを確認する "if" を内部に持つのはなぜですか? きっとそうではないでしょう、あるいはあなたは「もし」にたどり着かなかったでしょうね?