2009-07-30 5 views
1

でクラスライブラリをロード/は動的に私は最終的に私のサイト全体で使用するクラスの大規模なライブラリであることが判明するかを構築しています...私はオブジェクト指向プログラミングにかなり新しいですPHP

を構築します。明らかに、すべてのページにライブラリ全体をロードすることは、時間とエネルギーの無駄です。

私がしたいことは、各ページに単一の "config" PHPクラスファイルが必要であり、必要に応じて他のクラスを読み込むことができます - 私の必要に応じてクラスを拡張します。

私が知っているから、スコープの問題のために、他のファイルを単にinclude()するためにconfigクラスの関数を使うことはできません。

私のオプションは何ですか?開発者はどのようにしてこの問題に対処するのですか。最も安定しているのは何ですか?

答えて

3

__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; 
    } 
} 
+0

どこにでもクラスライブラリの設定に関するヒントを教えてくれるチュートリアルはありますか? – johnnietheblack

+0

サンプルのオブジェクトファクトリを追加しました。 – matpie

2

サードパーティのライブラリのクラスを使用している場合は、autoloadspl_autoload_registerのようなサウンドが必要です。

関連する問題