首頁 > 後端開發 > php教程 > 自動加載戰:PSR-0對PSR-4

自動加載戰:PSR-0對PSR-4

Christopher Nolan
發布: 2025-02-23 08:45:11
原創
200 人瀏覽過

Battle of the Autoloaders: PSR-0 vs. PSR-4

自動加載戰:PSR-0對PSR-4

鑰匙要點

  • > PSR-0和PSR-4是PHP中的自動加載標準,PSR-0根據類的名稱定義路徑,允許在類名稱中下劃線,而PSR-4的目的是簡化文件夾結構並刪除PSR -餘力。 0.
  • > PSR-4,稱為面向軟件包的自動加載,允許使用更清潔的軟件包,但實現更為複雜。它還可以確保自動加載器絕不應該引發異常或增加錯誤,並保持與多個自動加載器的兼容性。
  • PSR-0和PSR-4都有其優點和缺點:PSR-4允許更簡單的文件夾結構,但沒有顯示出完全合格名稱的類的確切路徑,而PSR-0可能是混亂的,但是支持開發人員使用較舊的命名慣例和輔助工具以其名稱定位課程。
  • >如果您已經超越了PHP培訓的初學者階段,那麼您已經聽說了PSR-0 - 一種自動加載標準,它定義了自動在代碼中自動包含PHP類的方法,而無需使用諸如要求和包含之類的語句。

> psr-0

> PSR-0查看類的命名空間,並從硬盤驅動器上的位置辨別出該信息的位置。例如,ZendMailMessage類將導致/path/path/project/lib/vendor/zend/mail/message.php。

> PSR-0還支持類名中的下劃線作為替代方案,以使從5.2及以更早的過渡更加容易。 zend_mail_message也將導致/path/to/project/lib/vendor/zend/mail/message.php。

作曲家

作曲家出現並席捲了PHP軟件包管理世界時,情況發生了變化。由於其某些規則,文件夾通常會重複,並且在通過作曲家查看PSR-0類安裝時變得太深了。例如,某些文件夾結構最終以這樣的方式出現:

這充其量是混亂的,因為:

vendor/
    vendor_name/
        package_name/
            src/
                Vendor_Name/
                    Package_Name/
                        ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                Vendor_Name/
                    Package_Name/
                        ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest
登入後複製
登入後複製

>“ SRC”和“測試”目錄必須包括供應商和軟件包目錄名稱。這是PSR-0符合性的工件。

>

因此,一些高素質的PHP開發人員聚集在一起,為新標準提出了建議:PSR-4。

> psr-4
PSR-4旨在在必要時與PSR-0進行補充並與之合作,而不是完全替代它。它可以,但不必。 PSR-4的主要目標是完全刪除PSR-0和5.3天前的殘餘物,並允許更簡潔的文件夾結構。使用PSR-4,上述文件夾將看起來像這樣:

>升級PSR-0不是選項

因為PSR-0不允許在類名稱的任何部分之間進行插圖
vendor/
    vendor_name/
        package_name/
            src/
                ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest
登入後複製
登入後複製
>

>這非常重要 - 這意味著實施PSR-4雖然允許更清潔的軟件包,但實施將變得更加複雜。我們稱呼為PSR-4包裝的自動加載,因為它有利於簡單之前的包裹清潔度。

>

選擇的方法

建議的目標如下:保留所有軟件包必須至少包含兩個命名空間級別(供應商和軟件包)的PSR-0規則,請確保供應商包裝組合可以映射到任何文件夾,並允許使用fifix供應商包裝組合和其餘完全合格的班級名稱之間的文件夾。

這意味著我們將能夠將我們的課程放在包裝代碼中的任何地方,對我們作為人類很有意義,並且仍然在PHP中平穩地使用它們,而無需編寫替代加載技術或求助於手動載入.

> 此外,草案明確指出,PSR-4自動加載器絕不應僅僅因為可以註冊多個自動加載器而引起異常或引起錯誤,並且如果一個人未能加載班級,則應該給其他機會這樣做,而其他人則有機會這樣做- 投擲- 投擲錯誤並停止流量破壞了此兼容性。如果需要有關故障的其他信息,則應使用PSR-3兼容記錄器或其他任意手段。 如示例文件中所示,使用PSR-4自動加載器從以下結構加載類:>

看起來像這樣:

在其中調用新的foobarquxquux;將嘗試從第一個註冊目錄加載,而新的foobarquxquuxtest;將嘗試從第二個加載。
vendor/
    vendor_name/
        package_name/
            src/
                Vendor_Name/
                    Package_Name/
                        ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                Vendor_Name/
                    Package_Name/
                        ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest
登入後複製
登入後複製
>

此示例還說明了每個單個名稱空間的多個文件夾的使用。

>
vendor/
    vendor_name/
        package_name/
            src/
                ClassName.php       # Vendor_Name\Package_Name\ClassName
            tests/
                ClassNameTest.php   # Vendor_Name\Package_Name\ClassNameTest
登入後複製
登入後複製
結論

自動加載中沒有銀色子彈。每種方法都帶來了一些優點和缺點 - PSR-4將允許更簡單的文件夾結構,但僅通過查看完全合格的名稱就可以阻止我們知道班級的確切路徑。另一方面,PSR-0在硬盤驅動器上是混亂的,但是支持過去陷入困境的開發人員(一流的名稱用戶),並通過查看其名稱來幫助我們辨別班級的位置。

>您對PSR-4的感覺如何?在下面的評論中讓我們知道,或在眾多辯論之一中表達您的意見。

>

>無論哪種方式 - 毫無疑問,以包裝為導向的自動加載將留在這裡。如果未正式接受為標準,則由需要它的人實施自定義。我們必須加入討論並改善足夠的概念以達到這種正式狀態。 >

關於PSR-0和PSR-4自動加載的常見問題

> PSR-0和PSR-4?

> PSR-0和PSR-4之間的主要區別在於它們處理名稱空間和目錄結構的方式。 PSR-0需要名稱空間與目錄結構之間的直接相關性,這意味著命名空間中的每個凸起都對應於目錄分離器。另一方面,PSR-4允許採用更靈活的方法,其中一部分名稱空間可以映射到任何目錄,其餘的名稱空間可以映射到子目錄結構。引入PSR-4時引入的PSR-4?引入了PSR-4,以克服PSR-0的某些局限性。 PSR-0在名稱空間和目錄結構之間的嚴格相關性導致了深度嵌套的目錄,這並不總是實用或有效的。 PSR-4提供了一種更靈活的方法,使開發人員可以將命名空間映射到任何目錄,從而減少了對深目錄嵌套的需求。

我可以在同一項目中同時使用PSR-0和PSR-4嗎? >

是的,可以在同一項目中同時使用PSR-0和PSR-4。但是,重要的是要注意,它們不應用於自動加載相同的類別。在大型項目中,使用兩種標準都可以是有益的,在大型項目中,某些遺留代碼遵循PSR-0標準,而較新的代碼遵循PSR-4標準。

> PSR-4在PSR-0上如何改善?通過提供更靈活的自動加載方法,PSR-4在PSR-0上有所改善。它允許開發人員將一部分名稱空間映射到任何目錄,從而減少對深目錄嵌套的需求。這使得管理和瀏覽項目的目錄結構變得更加容易。

是PSR-0棄用?

是的,PSR-0已被標記為已棄用。這意味著,儘管它仍然有效,但不建議在新項目中使用。 PSR-4是Php。

>

>自動加載的推薦標準。然後將其餘的名稱空間映射到子目錄結構。這允許採用自動加載的更靈活,更有效的方法。

使用PSR-4?

psr-4有什麼好處,包括多種好處,包括更靈活的自動加載方法,減少,減少需要深度目錄嵌套和提高效率。這也是PHP自動加載的建議標準,使其成為新項目的不錯選擇。

>

>我如何從psr-0到psr-4?到PSR-4涉及更改命名空間和目錄的方式。在PSR-4中,可以將一部分命名空間映射到任何目錄,其餘的名稱空間可以映射到子目錄結構。這可能需要重組項目的目錄結構。

>我可以在較舊的php版本中使用PSR-4嗎?

psr-4需要PHP 5.3或更高版本。如果您使用的是較舊版本的PHP,則需要升級才能使用PSR-4。 PHP可能會繼續發展,隨著語言及其生態系統的發展,新的標準和實踐被引入。但是,在可預見的將來,PSR-4是PHP中自動加載的建議標準。

以上是自動加載戰:PSR-0對PSR-4的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板