執行composer的update
、install
、require
、dump-autoload
等;我突然開始收到黃色棄用通知,上面寫著:
位於 ./foo/bar/utility/baz.php 的 FooBarBaz 類別不符合 psr-4 自動載入標準。跳過。
在 Composer 2.0 之前,通常會得到:
棄用通知:位於 ./foo/bar/Baz.php 的 FooBarBaz 類別不符合 psr-4 自動載入標準。 Composer v2.0 中將不再自動載入。在 phar:///usr/local/bin/composer/src/Composer/Autoload/ClassMapGenerator.php:201
為什麼我會收到此通知或警告?我需要什麼來擺脫它並為 Composer 2.0 做好準備?
就我而言,此錯誤是由檔案 ./foo/bar/utility/baz.php 副本出現在升級位置 ./foo/bar/baz.php 引起的,無論出於何種原因。刪除後者後,誤導性錯誤就消失了。儘管我花了幾個小時盯著小/大寫路徑名,但該檔案最初沒有任何問題。
發生這種情況的原因有很多。
重要的是注意錯誤訊息,它通常非常準確指出問題的根源。
路徑案例
最常見的原因是,如錯誤訊息所示,
Bar.php
路徑名稱的不同組成部分的大小寫與完全限定類別的大小寫不符姓名;foo/bar/Baz.php
與App\Bar\Baz
不符。只需更新您的應用程式或套件,以便每個路徑元件與其所擁有的命名空間的大小寫相符:
檔案名稱和類別名稱或命名空間差異
非常仔細地對照命名空間檢查路徑名。有時,您將類別(或名稱空間)命名為
FooBar
,但其在磁碟上的路徑是“foo-bar”,例如。或者只是出於任何原因,您的命名空間與檔案的路徑名不完全匹配。這也會觸發通知/警告。您需要重新命名檔案或重新命名類別(或命名空間)。
通常,更改路徑或檔案要容易得多,因為更改類別或命名空間名稱需要重構程式碼以匹配新名稱,而更改路徑不需要重構任何內容。
嵌套命名空間和缺少宣告
假設您有:
以及類別
Dummy
,在內部定義src/Buzz
:上面的方法可以工作,但是會像其他方法一樣拋出通知。正確的做法是:
您不僅需要對受影響的類別進行更改,還需要對使用或匯入此類的任何其他文件進行更改。 (例如,現在宣告
use Fizz\Buzz\Buzz\Dummy;
)。