1. 程式人生 > >PSR-4 自動載入規範

PSR-4 自動載入規範

關鍵詞 “必須”(“MUST”)、“一定不可/一定不能”(“MUST NOT”)、“需要”(“REQUIRED”)、
“將會”(“SHALL”)、“不會”(“SHALL NOT”)、“應該”(“SHOULD”)、“不該”(“SHOULD NOT”)、
“推薦”(“RECOMMENDED”)、“可以”(“MAY”)和”可選“(“OPTIONAL”)的詳細描述可參見 RFC 2119

1. 概述

本PSR是關於由檔案路徑自動載入對應類的相關規範,本規範是可互操作的,可以作為任一自動載入規範的補充,其中包括PSR-0,此外,本 PSR 還包括自動載入的類對應的檔案存放路徑規範。

2. 詳細說明

  1. 此處的類泛指class類、介面、traits可複用程式碼塊以及其它類似結構。
  2. 一個完全限定的類名稱有以下形式:

    1. 完全限定類名必須要有一個頂級名稱空間,被稱為”vendor namespace”。
    2. 完全限定類名可以有一個或多個子名稱空間。
    3. 完全限定類名必須有一個終止的類名。
    4. 在完全限定類名的任何部分中,下劃線都沒有特殊的意義。
    5. 所有的類名必須以大小寫敏感的方式引用。
  3. 當載入一個對應於一個完全限定的類名稱的檔案時…

    1. 在完全限定類命中,連續的一個或幾個子名稱空間構成的名稱空間字首(不包括頂級名稱空間的分隔符)至少對應著至少一個基礎目錄
    2. 在 名稱空間字首後的連續的子名稱空間名稱對應著 基礎目錄下的子目錄,其中的名稱空間分隔符表示目錄分隔符,子目錄名稱必須
      和子名稱空間名大小寫匹配。
    3. 終止類名必須與對應的以.php為字尾的檔案同名。
  4. 自動載入器(autoloader)的實現一定不能丟擲異常、一定不能觸發任一級別的錯誤資訊以及不應該有返回值。

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


關於本規範的實現,可參閱相關例項

注意:例項並不屬於規範的一部分,且隨時會有所變動。