当前位置: 首页 > 知识库问答 >
问题:

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

潘哲
2023-03-14

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

我读到的一些资源是。。。

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

我的理解是:

  • PSR-4不会将下划线转换为目录分隔符

请举例说明差异。

共有3个答案

松阳泽
2023-03-14

PSR-4类似于“相对路径”,PSR-0类似于“绝对路径”。

例如

配置:

'App\Controller' => 'dir/'

PSR-0自动加载:

App\Controller\IndexController --> dir/App/Controller/IndexController.php

PSR-4自动加载:

App\Controller\IndexController --> dir/IndexController.php

PSR-0和PSR-4在细节上还有一些不同,请参见此处:http://www.php-fig.org/psr/psr-4/

云和惬
2023-03-14

以下是主要的区别,

1.例如,如果定义Acme\Foo\命名空间锚定在src/中,

  • PSR-0意味着它将在src/Acme/Foo/Bar.php中查找Acme\Foo\Bar

2.PSR-4不将下划线转换为目录分隔符

3.您更喜欢使用带有名称空间的PSR-4

4.PSR-0将不工作,即使类名不同于文件名,如考虑上述示例:

  • Acme\Foo\Bar---

左丘曦
2023-03-14

它们非常相似,所以有点混乱也就不足为奇了。总结一下,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。

 类似资料:
  • 问题内容: 最近,我阅读了有关名称空间及其有益之处的信息。我目前正在Laravel中创建一个项目,并尝试从类映射自动加载转到命名空间。但是,我似乎无法理解PSR-0和PSR-4之间的实际区别。 我读过的一些资源是… 自动装弹机之战 Laracasts PSR-4自动加载 PSR-0 PSR-4 我的理解: PSR-4不会将下划线转换为目录分隔符 作曲者的某些特定规则导致目录结构变得复杂,这又使PS

  • 我和许多其他人一样,似乎很难弄清楚何时以及如何使用自动加载。我想我理解作曲家和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个班吧? 运行应用程序显示错误: 致命错误:未捕获错误:类'类\应用程序'