2011-12-21 48 views
0

當前在一個應用程序中,我包含了一個目錄中的類(任何數量的類都可以被放入該目錄)。雖然我想更進一步,並能夠從這些文件中創建一個類實例或類名稱數組CLASS ...當類文件被放入文件夾時,這可能嗎?下面是我目前使用包括文件的代碼(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

加入我們的21世紀和使用Autoloading。這是特別推薦的,因爲用你的方法確保更復雜,每個依賴項都按正確的順序解決。只是不要這樣做。

0

如果要包括的類文件時,可以使用get_declared_classes()獲取類名的列表。根據構造函數的作用,構建對象可能會稍微困難一些。如果沒有一個構造函數使用(必需的)參數,則可以遍歷該列表並構建其中的一個。否則,您可能需要使用反射來確定需要傳遞給每個類的參數。

您可能想問自己爲什麼要這麼做,以及您是否真的需要每個類的一個實例。這聽起來你可能需要的是某種Dependency InjectionService Locator

+0

所有的類將遵循預先定義的繼承和結構。雖然不get_declared_classes()獲取所有已聲明的類... – AndrewMcLagan

0

如果你的類名和文件名都是一樣的,你可以創建$filename一個$className並創建一個實例並將其存儲在$dict[md5($filename)] = new $className

但是你是那種重新發明了自動加載

+0

那麼我怎麼能實例化這些類而不知道它們是什麼?我想我會進入_autoload ......但我將不得不說服客戶去php 5 – AndrewMcLagan