小编典典

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

all

最近我读到了命名空间以及它们如何有益。我目前正在 Laravel 中创建一个项目,并尝试从类映射自动加载转移到命名空间。但是,我似乎无法掌握 PSR-0 和
PSR-4 之间的实际区别。

我读过的一些资源是......

我的理解:

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

解释差异的示例将不胜感激。


阅读 95

收藏
2022-05-23

共1个答案

小编典典

它们非常相似,因此有点令人困惑也就不足为奇了。总结是 PSR-0 对 PSR-4 删除的 PEAR
风格的类名有一些向后兼容的特性,因此它只支持命名空间代码。除此之外,PSR-4 并不强制您将整个命名空间作为目录结构,而只是将锚点之后的部分。

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

长话短说,对于新项目以及大多数意图和目的,您可以使用 PSR-4 而忘记 PSR-0。

2022-05-23