最近,我读到了一些关于名称空间以及它们的好处的文章。我目前正在用Laravel创建一个项目,并尝试从类映射自动加载转移到命名空间。但是,我似乎无法理解PSR-0和PSR-4之间的实际区别。
我读过的一些资源是...
我所理解的:
composer的特定规则导致目录结构变得复杂,从而使PSR-0命名空间变得冗长,因此创建了
请举例说明两者之间的区别。
发布于 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的事情。
发布于 2016-01-23 16:34:42
这里是主要的区别,
1.例如,如果您定义Acme\Foo\名称空间锚定在src/中,
使用PSR-0的
src/Acme/Foo/Bar.phpAcme\Foo\Bar,它将在中查找Acme\Foo\Bar2. PSR-4不会将下划线转换为目录分隔符
3.您更喜欢将PSR-4与名称空间一起使用
4.即使类名与文件名不同, PSR-0也无法工作,如上例所示:
Acme\Foo\Bar -> Bar类的src/Acme/Foo/Bar.php将会workAcme\Foo\Bar -> src/Acme/Foo/Bar2.php ( Bar类)将不工作发布于 2016-12-13 11:08:55
PSR-4类似于‘相对路径’,PSR-0,‘绝对路径’。
例如:
配置:
'App\Controller' => 'dir/'PSR-0自动加载:
App\Controller\IndexController --> dir/App/Controller/IndexController.phpPSR-4自动加载:
App\Controller\IndexController --> dir/IndexController.phpPSR-0和PSR-4在细节上有更多的不同,请看这里:http://www.php-fig.org/psr/psr-4/
https://stackoverflow.com/questions/24868586
复制相似问题