首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PSR-0和PSR-4有什么区别?

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

Stack Overflow用户
提问于 2014-07-21 23:12:22
回答 5查看 70.5K关注 0票数 244

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

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

我所理解的:

composer的特定规则导致目录结构变得复杂,从而使PSR-0命名空间变得冗长,因此创建了

  • PSR-4

请举例说明两者之间的区别。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-07-22 00:07:44

它们非常相似,所以有点混乱也就不足为奇了。总结一下,对于PSR-4丢弃的PEAR样式的类名,PSR-0具有一些向后兼容特性,因此它只支持命名空间代码。在此基础上,PSR-4不会强制您将整个名称空间作为目录结构,而只是将锚点后面的部分作为目录结构。

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

长话短说,对于新项目和大多数意图和目的,您可以使用PSR-4并忘记所有关于PSR-0的事情。

票数 304
EN

Stack Overflow用户

发布于 2016-01-23 16:34:42

这里是主要的区别,

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

使用PSR-0的

  • 这意味着它将在PSR-4中的src/Acme/Foo/Bar.php
  • while中查找Acme\Foo\Bar,它将在中查找Acme\Foo\Bar

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

3.您更喜欢将PSR-4与名称空间一起使用

4.即使类名与文件名不同, PSR-0也无法工作,如上例所示:

  • Acme\Foo\Bar -> Bar类的src/Acme/Foo/Bar.php将会work
  • Acme\Foo\Bar -> src/Acme/Foo/Bar2.php ( Bar类)将不工作
票数 50
EN

Stack Overflow用户

发布于 2016-12-13 11:08:55

PSR-4类似于‘相对路径’,PSR-0,‘绝对路径’。

例如:

配置:

代码语言:javascript
复制
'App\Controller' => 'dir/'

PSR-0自动加载:

代码语言:javascript
复制
App\Controller\IndexController --> dir/App/Controller/IndexController.php

PSR-4自动加载:

代码语言:javascript
复制
App\Controller\IndexController --> dir/IndexController.php

PSR-0和PSR-4在细节上有更多的不同,请看这里:http://www.php-fig.org/psr/psr-4/

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24868586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档