簡介
PSR-4 Autoloader,指的是 PHP 的自動加載規範。
PSR-4 是從檔案路徑自動加載對應的類的規範。它是可互相協作的,可用于補充其他的自動加載規範(包括 PSR-0)。此外,本規範還描述了自動加載的檔案如何放置的問題。
規範說明
這裡的類指的是 class、interface、trait 以及其他類似的結構。
完整的類名
一個完整的類名的形式是:
- 完整的類名 必須 要有一個頂級命名空間,被稱為 "vendor namespace";
- 完整的類名 可以 有一個或多個子命名空間;
- 完整的類名 必須 有一個最終的類名;
- 完整的類名中任意一部分的下滑線都沒有特殊含義;
- 完整的類名 可以 由任意大小寫字母組成;
- 所有類名 必須 是大小寫敏感的。
檔案加載
當根據完整的類名加載對應的類檔案時:
- 完整的類名中,去掉頭部的命名空間分隔符,前面連續的一個或多個命名空間和子命名空間,被稱作『 命名空間字首 』,它必須與至少一個檔案基目錄相對應。如 Monolog 。
- 緊接在命名空間字首後的子命名空間,必須與對應的檔案基目錄相比對,其中的命名空間分隔符将作為目錄分隔符。如 Monolog\Handler 。
- 末尾的類名 必須 與對應的以 .php 為字尾的檔案同名。如 use Monolog\Handler\AbstractHandler 加載的就是 vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php 類檔案。
- 自動加載器(autoloader)的實作 一定不可 抛出異常、一定不可 觸發任何級别的錯誤資訊,也不應該有傳回值。
示例
下表展示了符合 PSR-4 規範的完整類名、命名空間字首、檔案基目錄、檔案路徑之間的對應關系。
完整的類名 | 命名空間字首 | 檔案基目錄 | 檔案路徑 |
---|---|---|---|
\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 |
更多詳情可參考官方:https://www.php-fig.org/psr/psr-4/