搜尋

首頁  >  問答  >  主體

位於 ./foo/bar/utility/baz.php 的 Foo\Bar\Baz 類別不符合 psr-4 自動載入標準。跳繩

執行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粉052724364P粉052724364414 天前645

全部回覆(2)我來回復

  • P粉587780103

    P粉5877801032023-10-27 14:50:27

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

    回覆
    0
  • P粉959676410

    P粉9596764102023-10-27 12:42:14

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

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

    路徑案例

    最常見的原因是,如錯誤訊息所示,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;)。

    回覆
    0
  • 取消回覆