Пояснение к моей задаче на канале PHP задачи с собеседований.



Метод __get() выполняется при попытке чтения из недоступных (защищённых или приватных) или несуществующих свойств. Публичное неинициализированное типизированное свойство таковым не является.



Интересно, что вызов магических методов для неинициализированных свойств изначально был предусмотрен в RFC: Typed Properties 2.0 и имплементирован в 7.4.0. Однако после обсуждения различных WTF кейсов этот функционал был удалён в 7.4.1.



Чтобы всё-таки стриггерить __get, __set, __isset или __unset для типизированного свойства, необходимо сначала "удалить" его через unset: https://3v4l.org/RbFFM.



Пара статей про ленивую инициализацию свойств:

https://ocramius.github.io/blog/intercepting-public-property-access-in-php/,

https://ocramius.github.io/blog/lazy-property-automatic-property-initialization/.