PHP PSR-4 Autoloader 自動載入(中文版)

老表發表於2015-01-29

Autoloader

關鍵詞 “必須”("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. 完整的類名可以由任意大小寫字母組成;

    6. 所有類名都必須是大小寫敏感的。

  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

關於本規範的實現,可參閱 相關例項
注意:例項並屬於規範的一部分,且隨時有所變動。


原文:PizzaLiu github

相關文章