PHP規範PSR0和PSR4的理解

2021-07-24 14:26:15 字數 1768 閱讀 3019

下文描述了若要使用乙個通用的自動載入器(autoloader),你所需要遵守的規範:

參考:以下,列出psr0構建的規範類的幾種形式:

這個 psr 描述的是通過檔案路徑

自動載入

類的指南;它作為對 

psr-0

的補充;根據這個 指導如何規範存放檔案來自動載入;

術語「類」是乙個泛稱;它包含類,介面,traits 以及其他類似的結構;

完全限定類名應該類似如下範例:

()*完全限定類名必須有乙個頂級命名空間(vendor name);

完全限定類名可以有多個子命名空間;

完全限定類名應該有乙個終止類名;

下劃線在完全限定類名中是沒有特殊含義的;

字母在完全限定類名中可以是任何大小寫的組合;

所有類名必須以大小寫敏感的方式引用;

當從完全限定類名載入檔案時:

在完全限定類名中,連續的乙個或幾個子命名空間構成的命名空間字首(不包括頂級命名空間的分隔符),至少對應著至少乙個基礎目錄。

在「命名空間字首」後的連續子命名空間名稱對應乙個「基礎目錄」下的子目錄,其中的命名 空間分隔符表示目錄分隔符。子目錄名稱必須和子命名空間名大小寫匹配;

終止類名對應乙個以.php結尾的檔案。檔名必須和終止類名大小寫匹配;

自動載入器的實現不可丟擲任何異常,不可引發任何等級的錯誤;也不應返回值;

參考:在其中有以下的類例項,但是相對與psr0,卻是不太容易明白

首先,\symfony\core\request和\zend\acl很好理解,其滿足psr0規範,但是\acme\log\writer\file_writer就不太好理解了。

看了composer對psr4的處理,才能比較容易理解psr4。自動生成的psr4配置檔案名稱為autoload_psr4.php(psr0的是autoload_namespace.php),配置檔案返回乙個關聯陣列,鍵是命名空間的字首,值是命名空間字首對應的路徑。

以\acme\log\writer\file_writer作為例子,其命名空間字首是\acme\log\writer,則其在autoload_psr4.php表示為

[php]view plain

copy

'\\acme\\log\\writer' => (array) './acme-log-writer/lib/'

使用自動載入時,先通過命名空間的字首,找到對應的對映路徑,在根據psr0規範找到對應的類定義檔案。但是這裡有些例外,類名中的下劃線在psr4中是不需要轉換成目錄的。

使用psr4,我覺得有2個好處:

1. 減少**目錄的深度

2. 可以通過字首快速找到對映目錄,提高自動載入的效率

PHP規範PSR0和PSR4的理解

下文描述了若要使用乙個通用的自動載入器 autoloader 你所需要遵守的規範 參考 以下,列出psr0構建的規範類的幾種形式 這個 psr 描述的是通過檔案路徑 自動載入 類的指南 它作為對 psr 0 的補充 根據這個 指導如何規範存放檔案來自動載入 術語 類 是乙個泛稱 它包含類,介面,tr...

PHP規範PSR0和PSR4的理解

下文描述了若要使用乙個通用的自動載入器 autoloader 你所需要遵守的規範 參考 以下,列出psr0構建的規範類的幾種形式 這個 psr 描述的是通過檔案路徑自動載入類的指南 它作為對 psr 0 的補充 根據這個 指導如何規範存放檔案來自動載入 術語 類 是乙個泛稱 它包含類,介面,trai...

psr 0 和 psr 4的區別

psr 0 和 psr 4這兩種自動載入規範的區別 composer同時相容這兩種規範,但是這兩者有什麼區別呢?比如說在composer.json中我這樣定義了 那我使用use church testclass,那就對應src testclass.php.使用use church test test...