Я читал о магических методах php __get и __set, и, насколько я понимаю, полезно получить доступ к неопределенному или частному свойству класса. Итак, я пытался получить доступ к неопределенному свойству класса, чтобы проверить, какую ошибку он выдает. Но вместо ошибки он дает значение, которое я присвоил свойству объекта. см. код ниже.
class test{
}
$obj = new test();
$obj->name = "Hello";
echo $obj->name;
Вывод - «Привет».
Я не понимаю, почему он не выдает никаких ошибок? Какая польза от __get для неопределенной переменной ?? Почему в качестве вывода выдается «Привет»?
Ох, ладно . Если я явно назначил значение, поэтому я могу получить доступ напрямую, но чем будет использование __get и __set для свойства undefined.
Если вы реализуете свой собственный магический метод установки, то там вы можете, например, решить, какие свойства который вы хотите разрешить создавать таким образом… например, только те, которые начинаются с определенного префикса, а все остальные будут отклонены. А магический получатель может, например, вернуть значение по умолчанию для свойств, которые не существуют (пока) ...
Хм. Я сбит с толку . Было бы здорово, если бы вы могли привести пример.
Не совсем цель этого сайта ... Предложите вам найти книгу или несколько учебных пособий по этому вопросу.
Это довольно просто: __get будет вызван, если вы попытаетесь читать свойство, которого не существует. __set будет вызван, если вы попытаетесь использовать назначать для несуществующего свойства. Без __set$obj->name = ... просто создает свойство name, отныне оно делает существует, и вы можете просто получить к нему доступ.






Это нет undefined, потому что вы явно назначенный значение для него в предыдущей строке, которая автоматически «создала» его.