一尘不染

PSR-0和PSR-4有什么区别?

php

最近,我阅读了有关名称空间及其有益之处的信息。我目前正在Laravel中创建一个项目,并尝试从类映射自动加载转到命名空间。但是,我似乎无法理解PSR-0和PSR-4之间的实际区别。

我读过的一些资源是…

我的理解:

  • PSR-4不会将下划线转换为目录分隔符
  • 作曲者的某些特定规则导致目录结构变得复杂,这又使PSR-0命名间隔变得冗长,因此创建了PSR-4

解释差异的示例将是可理解的。


阅读 393

收藏
2020-05-29

共1个答案

一尘不染

它们非常相似,因此有点混乱也就不足为奇了。总结是,对于PSR-4放弃的PEAR样式类名,PSR-0具有一些向后兼容功能,因此它仅支持命名空间代码。最重要的是,PSR-4并不强制您将整个名称空间作为目录结构,而仅将锚点之后的部分作为目录结构。

例如,如果您定义Acme\Foo\名称空间锚定在src/PSR-0中,则意味着它将Acme\Foo\Barsrc/Acme/Foo/Bar.php其中查找,而在PSR-4中它将在in中查找src/Bar.php,从而允许使用较短的目录结构。另一方面,有些人更喜欢使用完整的目录结构来清楚地查看哪个名称空间中的内容,因此您也可以说PSR-4
Acme\Foo\src/Acme/Foo包含该名称空间,这将为您提供与上述PSR-0行为相当的功能。

总而言之,对于新项目以及大多数意图和目的而言,您可以使用PSR-4,而不必理会PSR-0。

2020-05-29