1. 概述
本 PSR 是關于由文件路徑 自動載入 對應類的相關規(guī)范,
本規(guī)范是可互操作的,可以作為任一自動載入規(guī)范的補充,其中包括 PSR-0,此外,
本 PSR 還包括自動載入的類對應的文件存放路徑規(guī)范。
關于「能愿動詞」的使用
為了避免歧義,文檔大量使用了「能愿動詞」,對應的解釋如下:
-
必須 (MUST):絕對,嚴格遵循,請照做,無條件遵守; -
一定不可 (MUST NOT):禁令,嚴令禁止; -
應該 (SHOULD):強烈建議這樣做,但是不強求; -
不該 (SHOULD NOT):強烈不建議這樣做,但是不強求; -
可以 (MAY)和可選 (OPTIONAL):選擇性高一點,在這個文檔內,此詞語使用較少;
參見:RFC 2119
2. 詳細說明
此處的「類」泛指所有的「Class類」、「接口」、「traits 可復用代碼塊」以及其它類似結構。
-
一個完整的類名需具有以下結構:
\<命名空間>(\<子命名空間>)*\<類名>完整的類名 必須 要有一個頂級命名空間,被稱為 "vendor namespace";
完整的類名 可以 有一個或多個子命名空間;
完整的類名 必須 有一個最終的類名;
完整的類名中任意一部分中的下滑線都是沒有特殊含義的;
完整的類名 可以 由任意大小寫字母組成;
所有類名都 必須 是大小寫敏感的。
-
當根據(jù)完整的類名載入相應的文件
完整的類名中,去掉最前面的命名空間分隔符,前面連續(xù)的一個或多個命名空間和子命名空間,作為「命名空間前綴」,其必須與至少一個「文件基目錄」相對應;
緊接命名空間前綴后的子命名空間 必須 與相應的「文件基目錄」相匹配,其中的命名空間分隔符將作為目錄分隔符。
末尾的類名 必須 與對應的以
.php為后綴的文件同名。自動加載器(autoloader)的實現(xiàn) 一定不可 拋出異常、一定不可 觸發(fā)任一級別的錯誤信息以及 不應該 有返回值。
3. 例子
下表展示了符合規(guī)范完整類名、命名空間前綴和文件基目錄所對應的文件路徑。
| 完整類名 | 命名空間前綴 | 文件基目錄 | 文件路徑 |
|---|---|---|---|
| \Acme\Log\Writer\File_Writer | Acme\Log\Writer | ./acme-log-writer/lib/ | ./acme-log-writer/lib/File_Writer.php |
| \Aura\Web\Response\Status | Aura\Web | /path/to/aura-web/src/ | /path/to/aura-web/src/Response/Status.php |
| \Symfony\Core\Request | Symfony\Core | ./vendor/Symfony/Core/ | ./vendor/Symfony/Core/Request.php |
| \Zend\Acl | Zend | /usr/includes/Zend/ | /usr/includes/Zend/Acl.php |
關于本規(guī)范的實現(xiàn),可參閱 相關實例。
注意:實例并 不 屬于規(guī)范的一部分,且隨時 會 有所變動。