最近,我阅读了有关名称空间及其有益之处的信息。我目前正在Laravel中创建一个项目,并尝试从类映射自动加载转到命名空间。但是,我似乎无法理解PSR-0和PSR-4之间的实际区别。
我读过的一些资源是…
我的理解:
解释差异的示例将是可理解的。
它们非常相似,因此有点混乱也就不足为奇了。总结是,对于PSR-4放弃的PEAR样式类名,PSR-0具有一些向后兼容功能,因此它仅支持命名空间代码。最重要的是,PSR-4并不强制您将整个名称空间作为目录结构,而仅将锚点之后的部分作为目录结构。
例如,如果您定义Acme\Foo\名称空间锚定在src/PSR-0中,则意味着它将Acme\Foo\Bar在src/Acme/Foo/Bar.php其中查找,而在PSR-4中它将在in中查找src/Bar.php,从而允许使用较短的目录结构。另一方面,有些人更喜欢使用完整的目录结构来清楚地查看哪个名称空间中的内容,因此您也可以说PSR-4 Acme\Foo\中src/Acme/Foo包含该名称空间,这将为您提供与上述PSR-0行为相当的功能。
Acme\Foo\
src/
Acme\Foo\Bar
src/Acme/Foo/Bar.php
src/Bar.php
src/Acme/Foo
总而言之,对于新项目以及大多数意图和目的而言,您可以使用PSR-4,而不必理会PSR-0。