Динамическое построение / загрузка библиотеки классов в PHP

StackOverflow https://stackoverflow.com/questions/1209865

  •  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 , если вы используете классы из сторонних библиотек.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top