2013-09-22 63 views
-4

是否有PHP庫或擴展將檢查您的代碼,找到您使用的所有類,然後自動加載這些類?檢測腳本中使用的所有類,並加載它們

當我編寫一個新的腳本時,需要編寫大量的require()語句是很繁瑣的。

我知道Facebook使用的東西與「https://github.com/facebook/libphutil」非常相似,它可以讓您在終端中運行一行,並加載所有依賴關係,不需要在代碼中的任何位置使用require()行或手動維護自動加載映射。 (這不是一個答案,因爲我不相信這是一個穩定的版本)

+5

自動加載器「與require()」一樣冗長「...?!武漢理工大學?你爲一個自動加載器寫一行代碼*一次*,然後在任何地方工作*。 – deceze

+4

一個自動加載器當然不是冗長的:一個包含代碼的單個代碼塊,並且在腳本中引用一個類時自動調用....可能共有5行代碼 –

+0

正確,但您仍然需要手動維護您擁有的所有課程的地圖。 –

回答

5

使用spl_autoload_register - 它允許你寫一小段代碼,根據它的類名加載一個類。如果您的命名標準一致,則您的自動加載器只需要幾行代碼,並會根據需要加載所有類。

這是從PHP手冊所採取的示例:

的代碼
// Using an anonymous function as of PHP 5.3.0 
spl_autoload_register(function ($class) { 
    include 'classes/' . $class . '.class.php'; 
}); 

三行是幾乎不冗長。

+0

這假設你所有的類都在一個目錄中。在我工作的大多數項目中,這些類都被組織到子目錄中。 –

+1

這個例子確實如此 - 那有什麼問題?如果將類文件拆分爲子目錄,則無法停止在自動裝載器例程中搜索子目錄,或者將類名稱映射到目錄名稱或您選擇的任何方案。從我在這篇文章中讀到的內容看來,你似乎已經將你的課程分成了許多目錄,這些目錄不適用於手動映射以外的其他任何目錄,但是你沒有解釋這種勞動密集型方案的理由。 – 2013-09-22 16:09:32

3

我不太清楚你爲什麼認爲自動加載器是冗長的。如果你堅持一個標準的命名約定,那麼一個自動加載器將會是幾行代碼,你可以把它放在一個include中,除了一個加載你的自動加載器之外,你永遠不會寫任何require調用。

至於你的問題的答案,不,沒有內置任何東西。它怎麼知道在哪裏得到代碼? PHP沒有像Java那樣定義良好的類路徑系統。

無論如何,你基本上是在描述一個自動加載器,儘管在代碼後期處理中會發生這種情況。對於大多數小型項目來說,構建步驟會給PHP代碼庫帶來更多的負擔而不是好處。

0

在這個問題上得到了令人印象深刻的數量。它被解釋爲自動生成自動載入的優點和缺點。這個問題的意思是「那裏會產生一個autoload地圖」。下面是它的答案:

如果你想要一個能夠自動檢查你的PHP文件的腳本,確定其中使用的所有類,然後爲你生成一個自動加載映射,你可以使用這個庫文件https://github.com/facebook/libphutil

似乎沒有任何開源替代品。

主要關注的是,實現這個庫的工作比手動編寫和維護PHP 5.3+中使用的自動加載映射的工作更加穩定,並確保您使用的任何其他庫與libphutil一起工作。從這個主題上的許多經驗豐富的開發人員來看,聽起來好像在一個小型項目中使用這樣的庫會對您的時間淨負值。

相關問題