目前,我所有的类都在一个文件夹中,并且在一个 namespace 下:

"psr-4": {
   "RootNamespace\\": "lib/"
},

这运作良好。随着我添加越来越多的类,我想将一些逻辑相关的类放入更深的 namespace 级别,但具有相同的根 namespace 。应该是这样的:
RootNamespace/Services (in 'lib/services' dir)
RootNamespace/Listeners (in 'lib/listeners' dir)

我想这样一来,我不需要更改composer.json ps-4自动加载定义中的任何内容,但是它不再起作用。

自动加载定义应如何实现我想要的目标?

经过我的测试,下面的解决方案不好,因为声明似乎已被覆盖
"psr-4": {
   "RootNamespace\\": "lib/",
   "RootNamespace\\Services\\": "lib/services/",
   "RootNamespace\\Listeners\\": "lib/listeners/"
},

最佳答案

根据PSR-4 Spec:



您的配置准确,因为在同一目录中嵌套了不同的PSR-4 namespace 。它应该可以工作,但在以后可能会造成困惑。

"psr-4": {
    "RootNamespace\\": "lib/",
    "RootNamespace\\Services\\": "lib/services/",
    "RootNamespace\\Listeners\\": "lib/listeners/"
},

我建议您要么将目录大写以符合PSR规范,要么将RootNamespace移出顶层lib/目录。

关于PHP-PSR-4 : Autoloader (composer) and multiple namespaces with the same root,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41752330/

10-12 07:33