Ваши предположения неверны.
Я понимаю, что "__get call!"появляется, когда $ employee-> name принимается
Нет, это не так.__get
вызывается только при попытке доступа к участнику, которого не существует .Вы определили общедоступный член с именем $name
, это то, что делает строка var $name
.Чтение / запись в $employee->name
никогда не вызовет магические __get
или __set_
методы.
Это не $employee->name
, что приводит к печати "__get called"
;$employee->name
возвращает "Mario"
, значение, которое вы присвоили этому члену, и , что - это то, что печатается.Именно $employee->age
вызывает печать "__get called"
.
Я попытался лучше объяснить строки и то, что они делают в отношении __get
:
$employee = new Employee();
$employee->name = "Mario"; # assign to $name
echo $employee->name."<br />"; # read "Mario" from $name, does NOT invoke __get
echo $employee->age; # attempt to read $age, invokes __get
RE: Ваше наблюдение
Замечание: Конечно, __get запускается, когда обнаруживает, что $ age не существует при чтении, но ... когда он запускается, почему эхо в нем не работает?
Эхо работает .Причина, по которой вы видите только один "__get called!"
, заключается в том, что __get
вызывается только один раз при попытке доступа к $employee->age
.