PHP 规范中 PSR-0 和 PSR-4 的区别?
问题
最近我读了一些关于命名空间的文章,以及它的益处。我目前正在 Laravel 中创建一个项目,并尝试从类映射自动加载转移到 命名空间。然而,我似乎无法理解 PSR-0 和 PSR-4 之间的实际区别。
我读过的一些资料...
我的理解:
- PSR-4 不会将下划线转换为目录分隔符
- Composer 的某些特定规则导致目录结构变得复杂,从而使 PSR-0 命名空间变得冗长,因此创建了 PSR-4
请举例解释差异,将不胜感激。
回答
它们非常相似,所以有点混乱也就不足为奇了。总结一下,PSR-0 对 PSR-4 删除的 PEAR 样式的类名有一些向后兼容的特性,因此它只支持命名空间代码。最重要的是,PSR-4 并不强制您将整个名称空间作为目录结构,而是仅将锚定点后面的部分作为目录结构。
例如,如果您定义 Acme\Foo\
命名空间锚定在 src/
中,使用 PSR-0 这意味着它将在 src/Acme/Foo/Bar.php
中查找 Acme\Foo\Bar
,而在 PSR-4 中,它将在 src/Bar.php
中查找它,从而允许更短的目录结构。 另一方面,有些人更喜欢拥有完整的目录结构以清楚地看到命名空间中有哪些内容,因此您也可以说 Acme\Foo\
在 PSR-4标准下的 src/Acme/Foo
中,会提供与上述 PSR-0 行为相同的功能。
长话短说,对于新项目以及大多数意图和目的,您可以使用 PSR-4 而忘掉 PSR-0。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。