2011-03-18 64 views
0

我目前正在建設自己的PHP框架,並正在創建大量的目錄來我的班存儲高效的自動加載功能

這是我當前的自動加載功能:

function __autoload($className) 
{ 
    $locations = array('', 'classes/', 'classes/calendar/', 'classes/exceptions/', 'classes/forms/', 'classes/table/', 'classes/user', 'pages/', 'templates/'); 
    $fileName = $className . '.php'; 

    foreach($locations AS $currentLocation) 
    { 
     if(file_exists($currentLocation . $fileName)) 
     { 
      include_once ($currentLocation . $fileName); 
      return; 
     } 
    } 
} 

現在在我的主類文件我確實已經包含了所有必需的類,因此不需要搜索它們。

這裏是我的問題:

  1. 足夠此功能有效?會有很多加載時間,或者有什麼方法可以使加載時間最短?
  2. 是include_once()我應該去包括類的方式嗎?
  3. 有沒有一種方法可以編寫函數來猜測最流行的文件夾?或者這會佔用太多時間和/或不可能?
  4. 命名空間會幫助我嗎? (我讀,現在瞭解他們。)
+1

不成熟的優化是萬惡之源。不要浪費時間優化它,直到它實際上成爲您網站的瓶頸。 – GWW 2011-03-18 02:09:09

+1

你也可以將這些子目錄添加到'include_path',只是加載$ filename。命名空間不是一個好方法,但是,目錄映射幾乎是其他框架濫用它們的原因。 – mario 2011-03-18 02:09:38

+0

@mario include_path是什麼?我查了一下,有點困惑。 – Flipper 2011-03-18 02:15:07

回答

1
  1. 這是回答得非常好位置:autoload and multiple directories
  2. 你或許應該require去,原因有二:1)你不需要如果已經包含了PHP文件,則需要跟蹤PHP,因爲如果它已經存在,則不需要首先調用__autoload; b)如果文件不能包含,則無法繼續執行
  3. 點1的答案覆蓋此
  4. 不一定;你需要一些命名空間般的機制來實現更快的加載(只看看,你必須),但你可以假,如果有必要,而無需使用真正的命名空間

僅供參考,__autoload和命名空間之間的相互作用記錄here