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。

psr
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://stackoverflow.com/questions/2486...

译文地址:https://learnku.com/laravel/t/61017

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!