Class FooBarBaz located in ./foo/bar/utility/baz.php does not comply with psr-4 autoloading standard. Skipping(位于./foo/bar/utility/baz.php中的类FooBarBaz不符合PSR-4自动加载标准。正在跳过)
问题描述
运行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做好准备,我需要做些什么?
推荐答案
发生这种情况的原因有多种。
重要的是要注意错误消息,它通常会非常准确地指向问题的根源。
路径大小写
最常见的原因是,如错误消息中所示,Bar.php
路径名的不同组件的大小写与完全限定的类名的大小写不匹配;
foo/bar/Baz.php
与AppBarBaz
不匹配。
只需更新您的应用程序或包,使每个路径组件与其包含的命名空间的大小写匹配:
FooBarBaz.php
文件名和类名或命名空间差异
非常仔细地对照名称空间检查路径名。有时您将您的类(或命名空间)命名为FooBar
,但是它在磁盘上的路径是";foo-bar";例如。或者只是因为某种原因,您的命名空间与文件的路径名不完全匹配。
这也将触发通知/警告。您需要重命名文件或重命名类(或命名空间)。
通常,更改路径或文件要容易得多,因为更改类或命名空间名称需要您重构代码以匹配新名称,而更改路径不需要重构任何内容。
嵌套命名空间和缺少声明
假设您有:
"autoload": {
"psr-4": {
"Fizz\Buzz\": "src/"
}
},
和Dummy
类,内部定义src/Buzz
:
// src/Buzz/Dummy.php
namespace FizzBuzz
class Dummy {}
上面的方法可以工作,但会像其他方法一样抛出通知。正确的方式应该是:
// src/Buzz/Dummy.php
namespace FizzBuzzBuzz
class Dummy {}
您不仅需要对受影响的类进行更改,还需要对使用或导入该类的任何其他文件进行更改。(例如,现在声明use FizzBuzzBuzzDummy;
)。
这篇关于位于./foo/bar/utility/baz.php中的类FooBarBaz不符合PSR-4自动加载标准。正在跳过的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:位于./foo/bar/utility/baz.php中的类FooBarBaz不符合PSR-4自动加载标准。正在跳过
基础教程推荐
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 在多维数组中查找最大值 2021-01-01