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