2014-09-28 35 views
0

這是我現在項目的禍根,也是我過去的項目。對於他們每個人,我使用的選擇都遠遠不夠理想。用於檢索完整名稱空間的優雅和實用解決方案

問題:我的項目有一個實例化任何類的註冊表,要求您傳遞一個完整名稱空間,並檢索完整的名稱空間可能會很痛苦。例如:

$registry->getClassInstance('\application\model\SomeModel'); 

要獲得完整的命名空間,我有幾個選項,所有繁瑣:

  1. 類型SomeModel,和PHP將找到的命名空間。但是,它的自動完成將不打印全名空間,而是打印SomeModel()並在文件頂部添加USE全名空間。如果IDE只是打印我輸入的完整名稱空間,則此問題已重新生成。相反,我必須右鍵點擊自動填充窗口兩次才能複製和粘貼完整的namspace,然後自己粘貼並添加一個開始/到它,非常麻煩。
  2. 對名稱空間使用defined()常量。將工作翻倍,性能降低一半,並可能導致本地缺陷
  3. 使用函數創建一個類對象以檢索所有命名空間。再次,很多麻煩和不切實際的使用

    如何保持我的名稱空間引用容易到達,並且易於在大型項目中更新?大項目通常如何處理這些問題?

+0

我真的很希望有人能幫助我,因爲我搜索了一個LOT如何處理包含和使用,並需要有組織的方式,我甚至無法找到關於此主題的討論 – Rob 2014-09-28 17:31:51

+0

這太令人沮喪了,爲什麼沒有人有沒有談過這個?每個人都在他們的項目中包含大量的包含(路徑)或命名空間,但我從來沒有看到如何組織,檢索和使它們易於更新的解決方案。什麼是最佳做法? – Rob 2014-09-28 17:39:31

回答

0

我不明白你在問什麼,或者你真的需要什麼。

我可以建議你,看看Symfony自動加載器。您可以將其用作組件,而不必使用整個框架。然後,您可以調用類並添加名稱空間,就好像它們是Java中的包一樣。

這回答你的問題?

+0

感謝您的回覆,但事實並非如此。我已經有一個自動加載器類。那麼讓我嘗試以不同的方式。在我所有的項目中,我都會對我的課程名稱空間進行多次調用。如果我不得不改變一個類的名字空間,我必須在代碼和修復中找到所有對它的引用,這是一個容易出錯和耗時的測試。解決這個問題的一個方法是爲命名空間定義()常量,但是它引入了我原始帖子中提到的其他問題。我試圖找到一個關於如何檢索和存儲名稱空間名稱的良好做法 – Rob 2014-09-28 19:13:18

+0

但是,例如,如果您正在使用Java,並且您更改了包的名稱,則還必須搜索代碼並修復(很明顯,IDE,Netbeans或者Eclipse都是爲你做的,但是它必須被完成......)。 – 2014-09-29 14:11:40

相關問題