В чём преимущество автозагрузчика классов? Простой код: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();? Естественно заранее не создавая "впрозапас" по экземпляру каждого класса.
Да, можно избавиться от строки $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() на этом экземпляре.
Да, можно избавиться от строки $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() на этом экземпляре.