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