自動加載
-
必須 (MUST)
: 絕對蕴潦,嚴格遵循净薛,無條件遵守汪榔; -
一定不可 (MUST NOT)
: 嚴令禁止; -
應該 (SHOULD)
: 強烈建議這樣做肃拜,但是不強求痴腌; -
不該 (SHOULD NOT)
: 強烈不建議這樣做,但是不要求燃领; -
可以 (MAY)
和可選 (OPTIONAL)
: 選擇性高一點士聪,在這個文檔內(nèi),此詞語使用較少猛蔽;
1. Overview
PSR-4 描述了從文件路徑中 自動加載 類的規(guī)范剥悟。它擁有非常好的兼容性,可以用于任何其他自動加載規(guī)范之外曼库,包括 PSR-0区岗。該 PSR 還描述了將根據(jù)規(guī)范自動加載的文件放在何處。
2. 規(guī)范 (Specification)
「class」術(shù)語指的是 類 (classes)凉泄、 接口 (interfaces)躏尉、 特征 (traits) 和 其他類似的結(jié)構(gòu)蚯根。
-
一個 完全限定類名 具有以下形式:
\<NamespceName>(\<SubNamespaceNames>)*\<ClassName>
完全限定類名 必須 擁有一個頂級命名空間名稱后众,也被稱作為「供應商命名空間」 (vendor namespace)。
完全限定類名 可以 有一個或者多個子命名空間名稱颅拦。
完全限定類名 必須 有一個終止類名蒂誉。PS:應該是指不能這樣
\<NamespaceName>(\<SubNamespace>)*\
來表示一個完整的類。下劃線在完全限定類名中沒有任何特殊含義距帅。(PSR-0 中下劃線是有含義的)
完全限定類名中的字母字符 可以 是任意的大寫和小寫的組合右锨。
所有類名都必須以區(qū)分大小寫的方式引用。
-
When loading a file that corresponds(符合碌秸,一致) to a fully qualified class name …
在完全限定的類名(一個「名稱空間前綴」)中绍移,由一個或多個前導名稱空間和子名稱空間名稱(不包括前導名稱空間分隔符)組成的連續(xù)命名空間至少對應一個「基準目錄」悄窃。
「名稱空間前綴」后面的相鄰子命名空間與根目錄下的目錄名稱相對應(且 必須 區(qū)分帶小寫),其中名稱空間的分隔符表示目錄分隔符蹂窖。
最終的類名與以
.php
結(jié)尾的文件的文件名保持一致轧抗。文件的名稱 必須 與最終類名的大小寫匹配。
自動加載器的實現(xiàn) 一定不可 拋出異常瞬测,一定不可 引發(fā)任何級別的錯誤横媚,也 不該 返回值。
3. 案例
下表顯示了與給定的 「完全限定類名」月趟、「命名空間前綴」和 「基準目錄」相對應的文件的路徑灯蝴。
「完全限定類名」 | 「命名空間前綴」 | 「基準目錄」 | 生成的文件路徑 |
---|---|---|---|
\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ī)范的一部分孝宗,它隨時都可能發(fā)生改變穷躁。