Динамическое построение / загрузка библиотеки классов в PHP - PullRequest
1 голос
/ 31 июля 2009

Я довольно новичок в программировании ОО ...

Я создаю то, что в конечном итоге окажется большой библиотекой классов, которые будут использоваться на моем сайте. Очевидно, что загрузка всей библиотеки на каждой странице - пустая трата времени и энергии ...

Итак, что я хотел бы сделать, так это потребовать, чтобы на каждой странице был один файл «config» php-класса, и я мог «вызывать» или «загружать» другие классы по мере необходимости - таким образом расширяя свой класс в соответствии с моими потребностями. 1005 *

Из того, что я знаю, я не могу использовать функцию в классе config для простого включения () других файлов из-за проблем с областью действия.

Какие у меня варианты? Как разработчики обычно решают эту проблему, и что является наиболее стабильным?

Ответы [ 2 ]

3 голосов
/ 31 июля 2009

Вы можете использовать __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;
    }
}
2 голосов
/ 31 июля 2009

Звучит так, как вы хотите автозагрузка и spl_autoload_register , если вы используете классы из сторонних библиотек.

...