原始composer.json
{('B', '3'), ('C', 3), ('A', '2'), ('C', 2)}
New composer.json
"autoload": {
"psr-4": { "": "src/" },
"classmap": [ "app/AppKernel.php", "app/AppCache.php" ],
"exclude-from-classmap": [ "/tests/" ]
},
"autoload-dev": {
"psr-4": { "tests\\": "tests/" }
}
我的特征在"autoload": {
"psr-4": {
"AppBundle\\": "src/AppBundle",
"TOTO\\": "src/TOTO"
},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php" ],
"exclude-from-classmap": [ "/tests/" ]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
},
"files": [
"vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php"
]
},
中定义,并被其他测试(例如tests\TOTO\Services\InvokeMethodTrait
)调用,因为为优化自动加载器而进行的更改使我得到了tests\TOTO\Services\ConversationServiceTest
。之前它运行正常,并且在相关类中我没有进行任何更改。
有什么主意吗?
答案 0 :(得分:1)
composer.json
的原始部分具有:
"psr-4": { "tests\\": "tests/" }
和新的:
"psr-4": {
"Tests\\": "tests/"
}
可以看到tests
命名空间的大小写有所变化。对于PHP(自然)而言,这不是问题,因为名称空间和类不区分大小写(有关PHP区分大小写https://stackoverflow.com/a/33273959/5264262的总结,是一个很好的答案)。但是,作曲家的自动加载器会以字符串形式接收该未知的类名称,并将所有完全限定的类名称解析为文件require
的某些路径,因此该过程区分大小写。在https://github.com/composer/composer/issues/2767上有关该主题的未解决问题进行了一些讨论。
最后一点是:我们在composer.json中的名称空间和类命名应区分大小写。