Pergunta

Eu sou bastante novo em programação OO ...

Estou construindo o que acabará por vir a ser uma grande biblioteca de classes para ser usado durante todo o meu site. Claramente, carregando toda a biblioteca em cada página é um desperdício de tempo e energia ...

Então, o que eu gostaria de fazer é exigir um único arquivo de classe php "config" em cada página, e ser capaz de "chamada" ou "carregar" outras classes como necessário -. Alargando assim a minha classe de acordo com minhas necessidades

Pelo que eu sei, eu não posso usar uma função na classe de configuração para simplesmente incluir () outros arquivos, por causa de problemas de escopo.

Quais são as minhas opções? Como os desenvolvedores geralmente lidar com este problema, e qual é o mais estável?

Foi útil?

Solução

Você pode usar __autoload() ou criar um objeto de fábrica que irá carregar os arquivos necessários quando você precisar deles.

Como um aparte, se você está tendo problemas de escopo com seus arquivos de biblioteca, você provavelmente deve refatorar seu layout. A maioria das bibliotecas são conjuntos de classes que podem ser instanciado em qualquer âmbito.

A seguir é um exemplo da fábrica objeto muito básico.

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;
    }
}

Outras dicas

Som como você deseja autoload e spl_autoload_register se você estiver usando as classes de bibliotecas 3o partido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top