PSR-4: Autoloader


網址:PSR-4: Autoloader


Specification

(1) "class" 是指所有的類別classes,介面 interfaces,特性traits,和其他相似的結構。
(2) 一個完整 class 名稱有以下格式:
 \<命名空間>(\<子命名空間>)*\<類別名稱>
 \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
  • 完整 class 名稱 “必須” 包含頂層命名空間名稱,也被稱為vendor namespace
  • 完整 class 名稱 “可能” 包含一個或更多次級命名空間名稱。
  • 完整 class 名稱 “必須” 包含一個尾端類別名稱
  • 底線在完整 class 名稱的任何位置都沒有特殊意義。
  • 完整 class 名稱裡的英文字母 “可以” 是大小寫混合。
  • 所有 class 名稱 “必須” 以區分大小寫的方式被參考。
(3) 當載入對應完整 class 名稱的檔案...
  • 接在完整 class 名稱(的命名空間前綴)之後,一個或多個前導命名空間和接續的命名空間(不包含前導命名空間前的分隔符號),至少會對應到一個「基底資料夾」。
  • 在「命名空間前綴」之後,接續的命名空間名稱會對應到「基底資料夾」下的子資料夾,命名空間分隔符號代表了資料夾的分層。子資料夾 “必須” 符合命名空間名稱的大小寫。
  • 尾端 class 名稱對應到以 .php 結尾的檔案,檔案 “必須” 符合 class 名稱的大小寫。
(4) 自動載入實作 “不可” 拋出例外, “不可” 發出任何等級的錯誤,並且 “不應該” 回傳任何值。

Examples

下表展示了符合規範完整類名、命名空間前綴和文件基目錄所對應的文件路徑。
完整 class 名稱命名空間前綴基底資料夾對應檔案路徑
\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

沒有留言:

張貼留言