Динамическое построение / загрузка библиотеки классов в PHP
-
06-07-2019 - |
Вопрос
Я довольно новичок в программировании ОО ...
Я строю то, что в конечном итоге окажется большой библиотекой классов, которые будут использоваться на моем сайте. Очевидно, что загрузка всей библиотеки на каждой странице - пустая трата времени и энергии ...
Итак, я хотел бы потребовать одну " конфигурацию " файл класса php на каждой странице и сможет вызывать " или "загрузить" другие классы по мере необходимости - таким образом, расширение моего класса в соответствии с моими потребностями.
Из того, что я знаю, я не могу использовать функцию в классе config для простого включения () других файлов из-за проблем с областью действия.
Какие у меня варианты? Как разработчики обычно решают эту проблему, и что является наиболее стабильным?
Решение
Вы можете использовать __ autoload ()
или создать фабрику объектов, которая будет загружать необходимые файлы, когда они вам нужны.
Кроме того, если у вас возникают проблемы с областями действия ваших библиотечных файлов, вам, вероятно, следует реорганизовать макет. Большинство библиотек представляют собой наборы классов, которые могут быть созданы в любой области.
Ниже приведен пример очень простой фабрики объектов.
class ObjectFactory {
protected $LibraryPath;
function __construct($LibraryPath) {
$this->LibraryPath = $LibraryPath;
}
public function NewObject($Name, $Parameters = array()) {
if (!class_exists($Name) && !$this->LoadClass($Name))
die('Library File `'.$this->LibraryPath.'/'.$Name.'.Class.php` not found.');
return new $Name($this, $Parameters);
}
public function LoadClass($Name) {
$File = $this->LibraryPath.'/'.$Name.'.Class.php'; // Make your own structure.
if (file_exists($File))
return include($File);
else return false;
}
}
// All of your library files should have access to the factory
class LibraryFile {
protected $Factory;
function __construct(&$Factory, $Parameters) {
$this->Factory = $Factory;
}
}
Другие советы
Звучит так, как вы хотите автозагрузка и spl_autoload_register , если вы используете классы из сторонних библиотек.