Domanda

Sono abbastanza nuovo nella programmazione OO ...

Sto costruendo quella che alla fine si rivelerà una grande libreria di classi da utilizzare in tutto il mio sito. Chiaramente, caricare l'intera libreria su ogni pagina è una perdita di tempo ed energia ...

Quindi quello che vorrei fare è richiedere una singola "configurazione". file di classe php su ogni pagina ed essere in grado di " chiamare " o "carica" altre classi se necessario - estendendo così la mia classe in base alle mie esigenze.

Da quello che so, non posso usare una funzione nella classe config per includere semplicemente () altri file, a causa di problemi di ambito.

Quali sono le mie opzioni? In che modo gli sviluppatori di solito gestiscono questo problema e qual è il più stabile?

È stato utile?

Soluzione

Puoi utilizzare __autoload () o creare una Factory oggetti che verrà caricata i file richiesti quando ne hai bisogno.

A parte questo, se riscontri problemi di ambito con i file della tua libreria, dovresti probabilmente riformattare il layout. La maggior parte delle librerie sono insiemi di classi che possono essere istanziati in qualsiasi ambito.

Di seguito è riportato un esempio di factory di oggetti di base.

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

Altri suggerimenti

Suona come vuoi autoload e spl_autoload_register se stai utilizzando classi di librerie di terze parti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top