位於 ./foo/bar/utility/baz.php 的 Foo\Bar\Baz 類別不符合 psr-4 自動載入標準。跳繩
P粉052724364
P粉052724364 2023-10-26 16:51:34
0
2
588

執行composer的updateinstallrequiredump-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 做好準備?

P粉052724364
P粉052724364

全部回覆(2)
P粉587780103

就我而言,此錯誤是由檔案 ./foo/bar/utility/baz.php 副本出現在升級位置 ./foo/bar/baz.php 引起的,無論出於何種原因。刪除後者後,誤導性錯誤就消失了。儘管我花了幾個小時盯著小/大寫路徑名,但該檔案最初沒有任何問題。

P粉959676410

發生這種情況的原因有很多。

重要的是注意錯誤訊息,它通常非常準確指出問題的根源。

路徑案例

最常見的原因是,如錯誤訊息所示,Bar.php 路徑名稱的不同組成部分的大小寫與完全限定類別的大小寫不符姓名;

foo/bar/Baz.phpApp\Bar\Baz 不符。

只需更新您的應用程式或套件,以便每個路徑元件與其所擁有的命名空間的大小寫相符:

Foo\Bar\Baz.php

檔案名稱和類別名稱或命名空間差異

非常仔細地對照命名空間檢查路徑名。有時,您將類別(或名稱空間)命名為 FooBar,但其在磁碟上的路徑是“foo-bar”,例如。或者只是出於任何原因,您的命名空間與檔案的路徑名不完全匹配。

這也會觸發通知/警告。您需要重新命名檔案或重新命名類別(或命名空間)。

通常,更改路徑或檔案要容易得多,因為更改類別或命名空間名稱需要重構程式碼以匹配新名稱,而更改路徑不需要重構任何內容。

嵌套命名空間和缺少宣告

假設您有:

"autoload": {
        "psr-4": {
            "Fizz\Buzz\": "src/"
        }
    },

以及類別Dummy,在內部定義src/Buzz

// src/Buzz/Dummy.php
namespace Fizz\Buzz

class Dummy {}

上面的方法可以工作,但是會像其他方法一樣拋出通知。正確的做法是:

// src/Buzz/Dummy.php
namespace Fizz\Buzz\Buzz

class Dummy {}

您不僅需要對受影響的類別進行更改,還需要對使用或匯入此類的任何其他文件進行更改。 (例如,現在宣告 use Fizz\Buzz\Buzz\Dummy;)。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!