В чём преимущество автозагрузчика классов? Простой код:spl_autoload_register(function ($class) {
include 'user/app/' . $class . '.php';
});

$obj = new MyClass();
$obj->displayVar();
В папке user/app/ лежит много классов и преимущество очевидно в том, что не надо include_once или require делать для каждого. Т.е. мы экономим по мути только на времени интерпретации файлов с классами, ведь даже если мы их поключим, но экземпляр не создадим, то ресурсы-то им всё равно не выделяться...
А можно избавиться от строки $obj = new MyClass(); и создавать экземпляр автоматически в момент $obj->displayVar();?
Естественно заранее не создавая "впрозапас" по экземпляру каждого класса.

21 Авг 2019 в 07:01
152 +1
0
Ответы
1

Да, можно избавиться от строки $obj = new MyClass(); и создавать экземпляр автоматически в момент вызова метода $obj->displayVar();. Для этого вам нужно изменить код вашего класса MyClass таким образом, чтобы он создавал экземпляр себя самостоятельно в случае, если он еще не был создан. Например, можно использовать паттерн Singleton для этого:

class MyClass {
private static $instance;
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function displayVar() {
echo 'Var';
}
}
spl_autoload_register(function ($class) {
include 'user/app/' . $class . '.php';
});
$obj = MyClass::getInstance();
$obj->displayVar();

Таким образом, если экземпляр MyClass еще не был создан, метод getInstance() создаст его, а затем будет вызван метод displayVar() на этом экземпляре.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир