PSR本来有四个规范,分别是:php
PSR-0 自动加载composer
PSR-1 基本代码规范日志
PSR-2 代码样式代码规范
PSR-3 日志接口code
2013年末,新出了第5个规范——PSR-4。接口
PSR-4规范了如何指定文件路径从而自动加载类定义,同时规范了自动加载文件的位置。这个乍一看和PSR-0重复了,实际上,在功能上确实有所重复。区别在于PSR-4的规范比较干净,去除了兼容PHP 5.3之前版本的内容,有一点PSR-0升级版的感受。io
区别:class
对比PSR-0,除了PSR-4能够更简洁外,须要注意PSR-0中对下划线(_)是有特殊的处理的,下划线会转换成DIRECTORY_SEPARATOR,这是出于对PHP5.3之前版本兼容的考虑,而PSR-4中是没有这个处理的,这也是二者比较大的一个区别。psr
此外,PSR-4要求在autoloader中不容许抛出exceptions以及引起任何级别的errors,也不该该有返回值。这是由于可能注册了多个autoloaders,若是一个autoloader没有找到对应的class,应该交给下一个来处理,而不是去阻断这个通道。exception
PSR-4更简洁更灵活了,但这使得它相对更复杂了。例如经过彻底符合PSR-0标准的class name,一般能够明确的知道这个class的路径,而PSR-4可能就不是这样了。
composer示例
{ "autoload": { "psr-0": { "Foo": "src/", }, "psr-4": { "Foo\\": "src/", } } }
若是加载这个类时Foo\\Bar\\Baz
PSR-0的查找路径是:src/Foo/Bar/Baz.php 即路径包含了命名空间部分
PSR-4的查找路径是:src/Bar/Baz.php 即路径不包含命名空间部分