当前位置: 首页 > 面试题库 >

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

钱朝明
2023-03-14
问题内容

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

我读过的一些资源是…

  • 自动装弹机之战
  • Laracasts PSR-4自动加载
  • PSR-0
  • PSR-4

我的理解:

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

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


问题答案:

它们非常相似,因此有点混乱也就不足为奇了。总结是,对于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。



 类似资料:
  • 最近我读了一些关于名称空间的文章,以及它们是如何有益的。我目前正在Laravel中创建一个项目,并尝试从类映射自动加载转移到名称空间。然而,我似乎无法理解PSR-0和PSR-4之间的实际区别。 我读到的一些资源是。。。 自动装弹机之战 Laracasts PSR-4自动加载 PSR-0 PSR-4 我的理解是: PSR-4不会将下划线转换为目录分隔符 请举例说明差异。

  • 我和许多其他人一样,似乎很难弄清楚何时以及如何使用自动加载。我想我理解作曲家和PSR-0/PSR-4的概念和这需要的目录结构。但是如果我用自己的MVC框架构建自己的项目 > 由于composer自带了自动加载器,它将加载我希望包含在项目中的所有依赖项,如果我不打算将我的网站变成分布式项目,我甚至需要自己的名称空间吗?为什么我不坚持使用include/requires? 最后,如果我采用名称空间,使

  • 我开始学习Composer,并正在开发一个系统,在该系统中,我将文件与核心应用程序文件分开,如下所示: 所以,要在composer中设置此设置。json文件并访问所有类/App much/Core会这样吗? 还是有更正确的方法? 我也读过PSR-0和PSR-4的比较,我仍然有点怀疑应该使用哪一种。在我的情况下,我应该实现什么,PSR-0还是PSR-4?

  • 我有一位作曲家。json结构如下: 我有文件在应用程序/数据库/种子(这里的文件可以动态创建,所以解决方案与类地图:[应用程序/数据库/种子]不工作在这里bcs我必须始终转储-自动加载前播种: 用户表种子。php 数据库播种机。php 结构如下: 在php编写器之后。phar安装和php编写器。phar dump autoload我不能在应用程序中使用,例如在索引中。php 因为我收到错误:类Da

  • 问题内容: 我了解您可以使用PSR标准来定位文件,也可以告诉作曲家一个目录来扫描类。 该 文档建议使用PSR-4 标准。作曲家还可以选择创建优化的自动加载器,该加载器基本上会生成完整的classmap。那么,如果最好的加载方式是通过类映射,为什么还要使用PSR-4? 保持目录结构对我来说很有意义,因为无论如何这都是组织的一种好方法。但是,似乎合理的选择是在开发机器上使用PSR-4加载,然后在生产环

  • 我正在用Slim和Twig创建一个web应用程序。我使用的库工作得很好,我可以轻松地调用它们。然而,作曲家并没有找到我自己的类。json自动加载psr-4(psr-0也找不到它们) 这是我的文件系统: 这是我的: 然后: 最后是我的文件: 当我运行时,命令输出: 生成包含0类的自动加载文件 然后以状态代码0退出。应该能找到4个班吧? 运行应用程序显示错误: 致命错误:未捕获错误:类'类\应用程序'