Kelas Foo\Bar\Baz yang terletak di ./foo/bar/utility/baz.php tidak mematuhi piawaian autoloading psr-4. lompat tali
P粉052724364
P粉052724364 2023-10-26 16:51:34
0
2
552

Menjalankan komposer updateinstallrequiredump-autoloaddll; tiba-tiba saya mula mendapat pemberitahuan penamatan kuning yang berkata:

Kelas FooBarBaz yang terletak di ./foo/bar/utility/baz.php tidak mematuhi piawaian autoloading psr-4. melompat ke atas.

Sebelum Komposer 2.0, anda biasanya akan mendapat:

Notis Penamatan: Kelas FooBarBaz yang terletak di ./foo/bar/Baz.php tidak mematuhi piawaian autoloading psr-4. Autoloading tidak akan tersedia lagi dalam Composer v2.0. di phar:///usr/local/bin/composer/src/Composer/Autoload/ClassMapGenerator.php:201

Mengapa saya mendapat pemberitahuan atau amaran ini? Apa yang saya perlu dapatkan daripada ini dan bersedia untuk Komposer 2.0?

P粉052724364
P粉052724364

membalas semua(2)
P粉587780103

Dalam kes saya, ralat ini disebabkan oleh salinan fail ./foo/bar/utility/baz.php yang muncul di lokasi yang dinaik taraf ./foo/bar/baz.php atas apa jua sebab. Selepas mengalih keluar yang terakhir, ralat yang mengelirukan hilang. Walaupun saya menghabiskan beberapa jam menatap nama laluan kecil/huruf besar, saya pada mulanya tidak mempunyai masalah dengan fail itu.

P粉959676410

Ini boleh berlaku atas pelbagai sebab.

Adalah penting untuk memberi perhatian kepada mesej ralat , ia biasanya sangat tepatdalam menentukan punca masalah.

Path Case

Punca yang paling biasa ialah, seperti yang ditunjukkan oleh mesej ralat, Bar.phpKes komponen nama laluan yang berbeza tidak sepadan dengan kes nama kelas yang layak sepenuhnya

foo/bar/Baz.phpAppBarBaz Tiada jodoh.

Hanya kemas kini aplikasi atau pakej anda supaya setiap komponen laluan sepadan dengan kes ruang nama yang dimilikinya:

Foo\Bar\Baz.php

Nama fail dan nama kelas atau perbezaan ruang nama

Semak nama laluan terhadap ruang nama dengan berhati-hati. Kadangkala anda menamakan kelas (atau ruang nama) FooBar tetapi laluannya pada cakera ialah "foo-bar", contohnya. Atau hanya itu atas sebab apa pun ruang nama anda tidak betul-betul sepadan dengan nama laluan fail.

Ini juga akan mencetuskan pemberitahuan/amaran. Anda perlu menamakan semula fail atau menamakan semula kelas (atau ruang nama).

Secara umum, lebih mudah untuk menukar laluan atau fail, kerana menukar nama kelas atau ruang nama memerlukan pemfaktoran semula kod untuk memadankan nama baharu, manakala menukar laluan tidak memerlukan pemfaktoran semula apa-apa.

Ruang nama bersarang dan pengisytiharan tiada

Andaikan anda mempunyai:

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

Dan kelas Dummy, ditakrifkan di dalam Dummy,在内部定义src/Buzzsrc/Buzz:

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

class Dummy {}

Kaedah di atas akan berfungsi, tetapi akan membuang pemberitahuan seperti kaedah lain. Pendekatan yang betul ialah:

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

class Dummy {}

Anda perlu membuat perubahan bukan sahaja pada kelas yang terjejas, tetapi juga pada mana-mana fail lain yang menggunakan atau mengimport kelas ini. (Sebagai contoh, sekarang isytiharkan use FizzBuzzBuzzDummy;).

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!