面試寶典系列-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 即路徑不包含命名空間部分

相關文章
相關標籤/搜索