@AdamDickins

Существует ли автозагрузка переменных в PHP?

Пришла одна мысль автозагрузка для переменной =)

class Example
{
    
    /**
    * Срабатывает автозагрузка если переменная не была задана
    * 
    * @var mixed
    */
    public $controller;
    
    public function getObject()
    {
        $object = $this->controller;
    }
}


$Example = new Example();
$Example->getObject();


Как есть автозагрузка классов с помощью spl_autoload_register(), и он вызывается если Класс не инициализирован,
есть ли способы решения но только для переменных.
Допустим если переменная $this->controller Не объявлена, то будет вызван автоматически загрузчик для поиска значения переменной, как spl_autoload_register() для классов.

Собственно хочется услышать ваши мысли.
  • Вопрос задан
  • 841 просмотр
Решения вопроса 1
php666
@php666
PHP-макака
Допустим если переменная $this->controller Не объявлена, то будет вызван автоматически загрузчик для поиска значения переменной, как spl_autoload_register() для классов.
это бред написан. что значит поиск значения переменной? где ты ее собрался искать, под шкафом?

все, что ты хочешь - называется ленивая загрузка:

class Example
{
    /**
     * @var Controller
     */
    protected $controller;

    /**
     * @return Controller
     */
    public function getController()
    {
        if (!$this->controller) {
            // инстанцируется при вызове метода, один раз и только по-требованию
            $this->controller = new Controller();
        }

        return $this->controller;
    }
}

$Example = new Example();
$Example->getController();
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Arik
если свойства public $controller; нет физически, то можно добавить методы __get() и __call(), от них уже отдавать что вам нужно
Ответ написан
Комментировать
@eee
То, что вы хотите называется [внедрение зависимостей](https://ru.m.wikipedia.org/wiki/Внедрение_зависимости). Для php можете посмотреть на php-di.org
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы