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

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

Опубликовано 19 ноября 2024 г.
Просматривать:187

When are PHP's `__get` and `__set` magic methods actually invoked?

Магические методы PHP: раскрытие __get и __set для перегрузки свойств

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

Однако распространенным заблуждением является то, что методы __get и __set используются для перегрузки ключевых слов get и set. Это не совсем точно.

Перегрузка свойств и магические методы

Хотя методы __get и __set можно использовать для перегрузки свойств, они отличаются от типичной перегрузки. методы на других языках. PHP явно обрабатывает доступ к свойствам посредством объявлений общедоступных, защищенных и частных свойств. Если свойство не объявлено в заданной области, PHP выдаст ошибку.

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

Использование __get и __set

Чтобы проиллюстрировать использование методов __get и __set, рассмотрим следующий пример:

class foo {
    public $bar;  // Public property
    public function __get($name) {
        echo "Get:$name";
        return $this->$name;  // Custom behavior for accessing inaccessible properties
    }
    public function __set($name, $value) {
        echo "Set:$name to $value";
        $this->$name = $value;  // Custom behavior for setting inaccessible properties
    }
}

В этом сценарии методы __get и __set предназначены для обеспечения индивидуального поведения при доступе к свойству $bar или его изменении. Например, вызов echo $foo->bar; вызовет метод __get, а $foo->bar = 'test'; будет включать метод __set.

Отладка и распространенные ошибки

Однако, как описано в исходном вопросе, если свойство уже публично объявлено (как в этом примере) , среда выполнения PHP будет напрямую обращаться к этому свойству. Следовательно, методы __get и __set не будут вызываться.

Это поведение подтверждается в разделе руководства PHP «Перегрузка свойств», в котором говорится, что методы __set и __get вызываются только при записи или чтении данных в недоступные свойства. не общедоступные свойства.

В общем, магические методы не следует рассматривать как замену правильных функций получения и установки или прямых вызовов методов. В первую очередь они служат цели обработки недопустимого доступа к свойствам и обеспечения альтернативного поведения в таких сценариях. Кроме того, важно отметить, что магические методы могут привести к снижению производительности по сравнению с прямым доступом к свойствам.

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

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

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

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

Copyright© 2022 湘ICP备2022001581号-3