«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему мои магические методы __get и __set не вызываются в PHP?

Почему мои магические методы __get и __set не вызываются в PHP?

Опубликовано 21 декабря 2024 г.
Просматривать:885

Why aren't my __get and __set magic methods being invoked in PHP?

Перегрузка геттеров и сеттеров: понимание магических методов __get и __set

Магические методы __get и __set в PHP предназначены для предоставления альтернативы традиционные геттеры и сеттеры. Переопределяя эти методы, разработчики могут настроить поведение доступа и изменения свойств. Однако, как видно из приведенного примера кода, эти методы не вызываются должным образом.

Проблема: магические методы и общедоступные свойства

Когда свойства объявлены общедоступные, они считаются доступными, и PHP не вызывает методы __get и __set. В этом конкретном случае свойство $bar объявлено общедоступным, что делает магические методы излишними.

Перегрузка свойств с помощью магических методов

Как упоминалось в руководстве по PHP, __get используется для обработки чтения данных из недоступных свойств, а __set используется для записи данных в недоступные свойства. Если бы свойство $bar было определено как частное или защищенное, вмешались бы методы __get и __set.

Последствия для производительности

Важно отметить, что магические методы значительно медленнее, чем обычные геттеры, сеттеры и прямые вызовы методов. Поэтому их следует использовать разумно для конкретных случаев использования, таких как обработка ошибок или обеспечение динамического доступа к свойствам.

Заключение

Магические методы __get и __set в PHP служат конкретной цели и должен использоваться только при необходимости, понимая связанные с этим компромиссы в производительности. В случаях, когда свойства доступны, как в приведенном примере, более эффективно использовать стандартные методы доступа и изменения свойств.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3