Можно ли перегрузить публичные (или доступные) свойства объекта? Есть объект. Его protected свойства представлены в виде других объектов (точнее, изначально они представлены в виде массивов, и при инициализации замещаются на объекты нужных классов).
Всё хорошо, но хочется сделать это «лениво», т.е. чтобы свойства превращались в объекты только тогда, когда к ним пытаются обратиться.
Для обращений извне это реализовывается легко, магическим методом __get(). Но он не будет работать при обращении к этим свойствам «изнутри» (т.е. $this->protected_property), потому что изнутри эти свойства доступны.
Существует ли какой-то хитрый способ перегрузить доступные свойства?

21 Авг 2019 в 07:10
178 +1
1
Ответы
1

Да, можно решить эту проблему, используя метод __get() и ленивую инициализацию. Вместо того, чтобы прямо обращаться к protected свойствам изнутри класса, вы можете создать методы-геттеры для этих свойств. В этих методах вы проверяете, инициализировано ли свойство, и если нет, инициализируете его и возвращаете значение.

Пример:

class MyClass {
private $protectedProperty;
// Метод-геттер для protected свойства
public function getProtectedProperty() {
if (!$this->protectedProperty) {
$this->initializeProtectedProperty();
}
return $this->protectedProperty;
}
// Метод для инициализации protected свойства
private function initializeProtectedProperty() {
$this->protectedProperty = new MyProtectedObject();
}
}

Теперь, вместо обращения к $this->protectedProperty напрямую, вы можете использовать $this->getProtectedProperty(), что позволит вам реализовать ленивую инициализацию для protected свойств.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 654 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир