天天看點

PSR-4 自動加載規範

簡介

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/