「PSR 規(guī)范」PSR-4 自動(dòng)加載規(guī)范

1. 概述

本 PSR 是關(guān)于由文件路徑 自動(dòng)載入 對(duì)應(yīng)類(lèi)的相關(guān)規(guī)范,
本規(guī)范是可互操作的,可以作為任一自動(dòng)載入規(guī)范的補(bǔ)充,其中包括 PSR-0,此外,
本 PSR 還包括自動(dòng)載入的類(lèi)對(duì)應(yīng)的文件存放路徑規(guī)范。

關(guān)于「能愿動(dòng)詞」的使用

為了避免歧義,文檔大量使用了「能愿動(dòng)詞」,對(duì)應(yīng)的解釋如下:

  • 必須 (MUST):絕對(duì),嚴(yán)格遵循,請(qǐng)照做,無(wú)條件遵守;
  • 一定不可 (MUST NOT):禁令,嚴(yán)令禁止;
  • 應(yīng)該 (SHOULD) :強(qiáng)烈建議這樣做,但是不強(qiáng)求;
  • 不該 (SHOULD NOT):強(qiáng)烈不建議這樣做,但是不強(qiáng)求;
  • 可以 (MAY)可選 (OPTIONAL) :選擇性高一點(diǎn),在這個(gè)文檔內(nèi),此詞語(yǔ)使用較少;

參見(jiàn):RFC 2119

2. 詳細(xì)說(shuō)明

  1. 此處的「類(lèi)」泛指所有的「Class類(lèi)」、「接口」、「traits 可復(fù)用代碼塊」以及其它類(lèi)似結(jié)構(gòu)。

  2. 一個(gè)完整的類(lèi)名需具有以下結(jié)構(gòu):

     \<命名空間>(\<子命名空間>)*\<類(lèi)名>
    
    1. 完整的類(lèi)名 必須 要有一個(gè)頂級(jí)命名空間,被稱(chēng)為 "vendor namespace";

    2. 完整的類(lèi)名 可以 有一個(gè)或多個(gè)子命名空間;

    3. 完整的類(lèi)名 必須 有一個(gè)最終的類(lèi)名;

    4. 完整的類(lèi)名中任意一部分中的下滑線都是沒(méi)有特殊含義的;

    5. 完整的類(lèi)名 可以 由任意大小寫(xiě)字母組成;

    6. 所有類(lèi)名都 必須 是大小寫(xiě)敏感的。

  3. 當(dāng)根據(jù)完整的類(lèi)名載入相應(yīng)的文件

    1. 完整的類(lèi)名中,去掉最前面的命名空間分隔符,前面連續(xù)的一個(gè)或多個(gè)命名空間和子命名空間,作為「命名空間前綴」,其必須與至少一個(gè)「文件基目錄」相對(duì)應(yīng);

    2. 緊接命名空間前綴后的子命名空間 必須 與相應(yīng)的「文件基目錄」相匹配,其中的命名空間分隔符將作為目錄分隔符。

    3. 末尾的類(lèi)名 必須 與對(duì)應(yīng)的以 .php 為后綴的文件同名。

    4. 自動(dòng)加載器(autoloader)的實(shí)現(xiàn) 一定不可 拋出異常、一定不可 觸發(fā)任一級(jí)別的錯(cuò)誤信息以及 不應(yīng)該 有返回值。

3. 例子

下表展示了符合規(guī)范完整類(lèi)名、命名空間前綴和文件基目錄所對(duì)應(yīng)的文件路徑。

完整類(lèi)名 命名空間前綴 文件基目錄 文件路徑
\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ān)于本規(guī)范的實(shí)現(xiàn),可參閱 相關(guān)實(shí)例。

注意:實(shí)例并 屬于規(guī)范的一部分,且隨時(shí) 會(huì) 有所變動(dòng)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容