gpt4 book ai didi

php - 位于 ./foo/bar/utility/baz.php 的 Foo\Bar\Baz 类不符合 psr-4 自动加载标准。跳绳

转载 作者:行者123 更新时间:2023-12-03 20:24:37 26 4
gpt4 key购买 nike

运行 Composer 的 update 时, install , require , dump-autoload , 等等。;我突然开始收到一条黄色的弃用通知,上面写着:

Class Foo\Bar\Baz located in ./foo/bar/utility/baz.php does not comply with psr-4 autoloading standard. Skipping.


在 Composer 2.0 之前,曾经得到:

Deprecation Notice: Class Foo\Bar\Baz located in ./foo/bar/Baz.php does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar:///usr/local/bin/composer/src/Composer/Autoload/ClassMapGenerator.php:201


为什么我会收到此通知或警告?我需要什么才能摆脱它并为 Composer 2.0 做好准备?

最佳答案

发生这种情况的原因有多种。
重要的是注意错误信息其中一般分非常准确到问题的根源。
路径案例
最常见的原因是,如错误消息所示,Bar.php 路径名的不同组成部分的情况。与完全限定类名的大小写不匹配;foo/bar/Baz.php不匹配 App\Bar\Baz .
只需更新您的应用程序或包,以便每个路径组件与其拥有的命名空间的大小写相匹配:

Foo\Bar\Baz.php
文件名和类名或命名空间差异
非常仔细地根据命名空间检查路径名。有时你命名你的类(或你的命名空间) FooBar ,但它在磁盘上的路径是“foo-bar”,例如。或者只是出于某种原因,您的命名空间与文件的路径名不完全匹配。
这也会触发通知/警告。您需要重命名文件或重命名类(或命名空间)。
通常,更改路径或文件要容易得多,因为更改类或命名空间名称需要重构代码以匹配新名称,而更改路径不需要重构任何内容。
嵌套的命名空间和缺少的声明
假设您有:
"autoload": {
"psr-4": {
"Fizz\\Buzz\\": "src/"
}
},
和类(class) 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; )。

关于php - 位于 ./foo/bar/utility/baz.php 的 Foo\Bar\Baz 类不符合 psr-4 自动加载标准。跳绳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64010172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com