2017-06-21 88 views
0

我目前正在從事PHP項目的學生,這個項目已經從時間開始增長,並且擁有大約1800個php文件。轉換爲PHP中的命名空間

問題是:它完全沒有命名空間,或任何PSR-4等建議。這個技術債務很強大:)。

想要使用作曲家(以及小枝和一些圖書館)以及包括這個(特別是作曲家)在內的問題。我想這是因爲在composer-autoloader中通過spl_autoload_register()覆蓋了__autoload()

有沒有一個好的,快速的方法來開始集成命名空間而不用重寫整個項目?

+0

哎喲,沒有PSR-4?這個項目必須是古老的。所以我爲你找到了一些資源[** here **](https://jtreminio.com/2012/10/composer-namespaces-in-5-minutes/)和[** here **](https ://stackoverflow.com/questions/31504980/php-adding-custom-namespace-using-autoloader-from-composer)。從我使用作曲家到現在已經很久了,如果這些幫助不大,請原諒我。 –

+2

請注意,命名空間與作曲家或自動加載沒有多大關係;這些都是正交的概念。 – deceze

+1

Composer還可以處理PSR-0或手動指定要自動加載的文件和文件夾。擺脫任何現有的自動加載器並讓作曲家自己完成任務應該是安全的。退房https://getcomposer.org/doc/04-schema.md#autoload – apokryfos

回答

0

您仍然可以使用Composer和PSR-0或classmap。

我可能會先與classmap一起去。優點:可以處理每個文件的多個類。可以處理任意文件結構。

一旦使用Composer的自動加載功能,您可以開始刪除現有的自動加載器或那些可能遍佈整個地方的require_once/include_once

一旦你擺脫了所有文件加載傳統並已建立Composer自動加載,您可以嘗試根據PSR-0組織代碼。這可能會要求您重命名文件並重新定位它們。也可能是這些類沒有任何可識別的前綴 - 這對您的PSR-0自動加載不利,因爲所有這些文件都屬於一個文件夾。

請注意,直到此時,您還沒有更改任何類的名稱,因此代碼應該運行而不做任何更改。

使用名稱空間沒有非常明顯的優勢。您將被迫重命名所有類,重命名該類名稱的所有用法,總而言之,如果單獨使用它將不會提供任何明顯的好處。另一方面,聽起來你也想重構其他所有東西,所以切換到命名空間可以用作「新」代碼的信號。

您可以同時使用PSR-4和PSR-0,所以它不會影響您對類的重命名(除了所有地方必需的類名更改外)。

+0

謝謝。我會嘗試上面的鏈接(其他人會回答並記住你的建議:)。特別是我/我們可以同時使用PSR-4/0對我來說是一種明顯的但新的東西:)。 – neulaender