面试宝典系列-PSR-0和PSR-4

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 即路径不包含命名空间部分

相关文章
相关标签/搜索