2013-04-30 85 views
1

你好我想加載存儲在不同目錄中的類。 我嘗試使用聲壓級,但我必須設置加載目錄在哪裏搜索。從多個目錄自動加載類的最佳方法

我的結構,就像是Zend公司FW:

| --root

| - 圖書館

| ----數據庫[DIR]

| - ------- adapter.php

| --------- results.php

| -----註冊表[目錄]

| --------- format.php

| --------- BLA-bla.php

| --index.php

function __autoload($class_name) 
{ 
    include LIB."database/".$class_name.".php"; 
    include LIB."registry/".$class_name.".php"; 
} 

如何自動加載所有從庫(所有文件夾),而不definig包括LIB 「數據庫/」, 「註冊表」

+0

加載目錄非常像包含路徑。一種方法是創建一個兼容PSR-0的自動加載器,其中包含路徑。所以剩下要做的就是配置包含路徑。如果該自動加載器與「spl_autoload」兼容,那麼你不會破壞任何常見的東西。 – 2013-04-30 18:10:49

+0

Ty快速重播,但我不明白你。你能舉例說明嗎? – Ivan 2013-04-30 18:17:50

回答

3

你可以使用一些約定的機智。 h你的班級名稱將幫助你破譯它的位置。很多框架使用的類名約定用於此目的..

例如:

class diseases_autoimmune_lupus{ 

} 

然後,您可以explode()由下劃線(_),然後你的自動加載功能的類名稱中使用implode()用斜槓(/)來構建相關文件的路徑。

function __autoload($class_name){ 
    $classParts = explode('_',$class_name); 
    $path = '/'.implode('/',$classParts) . '.php'; 
    include($_SERVER['DOCUMENT_ROOT'].$path); 
} 

在前面的例子中,lupus.php類坐落在您的網站的根文件夾中的文件夾diseases/autoimmune/diseases/autoimmune/lupus.php

+1

這是好的,但我有一個大項目,我必須重命名所有的核心類與「CORE_」我會失去很多時間... – Ivan 2013-04-30 18:23:59

+1

對已經存在的大型代碼庫進行更改總是很辛苦 - 但通常是值得的:) – Lix 2013-04-30 18:24:57

相關問題