2011-12-21 8 views
0

現在、アプリケーションには、ディレクトリのクラスが含まれています(クラスはいくつでもこのディレクトリにドロップできます)。私はさらに一歩一歩進んで、クラスインスタンスまたはクラス名の配列を作成することができますクラスこれらのファイルから...クラスファイルがフォルダにドロップされるとこれは可能ですか?下記の私は現在、あなたがクラスファイルを含めている場合は、クラス名のリストを取得するにはget_declared_classes()を使用することができますファイル(PHP4のCOMPAT)自動クラスのインクルードとインスタンスの作成PHP

// Include custom field types, as drop-ins 
$include_files = (array) glob(METAMAKER_FIELDS_DIR."*.php"); 
if(is_array($include_files)) { 

    foreach($include_files as $filename) { 
     if (!empty($filename) && strstr($filename, 'php')) { 
      include_once($filename); 
     } 
    } 
} 
+3

'glob 'の返り値が配列であるというのはちょっと妄想しませんか? :) – deceze

+3

あなたはAutoload(http://php.net/manual/en/language.oop5.autoload.php)を使用する必要があります – Dezigo

+0

LOL @ Deceze ...はい私は推測します。私はそれを見ていない – AndrewMcLagan

答えて

4

を発明再度ているしかしにご参加$dict[md5($filename)] = new $className

でそれを保存することができますそして、Autoloadingを使用してください。これは、あなたのアプローチがより複雑になるため、すべての依存関係が適切な順序で解決されるため、特に推奨されます。このようにしないでください。

0

を含めるために使用するコードです。コンストラクタがどのようなものかによって、オブジェクトを構築するのが少し難しくなるかもしれません。コンストラクタのどれもが(必要な)パラメータを取らない場合は、リストを反復して、それぞれを構築することができます。それ以外の場合は、リフレクションを使用して、各クラスに渡す必要がある引数を解決する必要があります。

なぜあなたはこれをやっているのか、実際には各クラスのインスタンスが1つ必要かどうかを尋ねたいことがあります。あなたが必要とするかもしれないものは、Dependency InjectionまたはService Locatorのようなものです。

+0

すべてのクラスは、あらかじめ定義されている継承と構造に従います。 get_declared_classes()は宣言されているすべてのクラスを取得しませんが... – AndrewMcLagan

0

あなたのクラス名とファイル名が同じである場合は、$filenameから$classNameを作成して、インスタンスを作成し、一種の自動ロードに

+0

どうすればこれらのクラスをインスタンス化できますか?私は_autoloadに移動すると思う...しかし、私はクライアントにPHP 5に行くように説得する必要があります – AndrewMcLagan

関連する問題