首頁 php教程 php手册 PHP的PSR系列規範

PHP的PSR系列規範

May 23, 2018 pm 02:58 PM
php psr 規範

PSR

是PHP Standard Recommendation的簡寫,它其實應該叫PSRs,即係列推薦標準:目前通過的規格有PSR-0(Autoloading Standard)、PSR-1(Basic Coding Standard)、PSR-2(Coding Style Guide)、PSR-3(Logger Interface)、PSR-4(Improved Autoloading)。它不是PHP官方標準,而是從如Zend、Symfony2等知名PHP項目中提煉出來的一系列標準,目前有越來有多的社區項目加入成員並遵循該標準。

PHP-FIG — PHP Framework Interoperability Group, 是製定PSRs開發規範的組織,它的成員由許多知名PHP社群專案組成,在其官網首頁下方可以看到成員清單。這些成員制定規範,並且落實在自己的專案中。

其實各個PSR規範的內容都很簡潔明了,比起那些動則幾十頁的規範,真是好太多了。

PSR-0(Autoloading Standard)

PSR-0即類自動載入規格(原文:官網、GitHub)。從2014-10-21日起,該規範被標記為Deprecated,由PSR-4取代。它的內容十分簡潔。

內容:

一個完全合格的命名空間和類別名稱必須有以下的結構“()*

每個命名空間必須有頂級的命名空間(“ Vendor Name」)

每個命名空間可以有任意多個子命名空間

每個命名空間在被從檔案系統載入時必須轉換為「作業系統路徑分隔符號」(DIRECTORY_SEPARATOR )

每個「_ 」字元在「類別名稱」中轉換為DIRECTORY_SEPARATOR 。 「_」符號在命名空間中沒有明確意義

符合命名標準的命名空間和類別名稱必須以「.php」結尾來載入檔案

Vendor Name,命名空間,類別名稱可以由大小寫字母組成,其中命名空間和類別名稱是大小寫敏感的以保證多系統相容性

PSR-1(Basic Coding Standard)

PSR-1即基礎編碼標準(原文:官網、GitHub)。內榮也十分簡潔,包含了類別檔案、類別名稱、類別方法名稱的命名方法。

內容:

原始檔案必須只使用 

原始檔案中php程式碼的編碼格式必須只使用不帶BOM的UTF-8

一個原始檔案建議只用來做聲明(類,函數,常量等)或只用來做一些引起副作用的操作(例如:輸出信息,修改.ini配置文件等),但不應該同時做這兩件事

命名空間和類必須遵守PSR-0標準

類別名稱必須使用StudlyCaps寫法

類別中的常數必須只由大寫字母和底線(_)組成

方法名稱必須使用cameCase寫法

PS

PSR-2即編碼風格標準(原文:官網、GitHub)。內容就稍多,但還是比較簡潔,它以PSR-1為基礎,包含了縮排、每行程式碼長度、換行、方法可見性宣告、空格和方法體大括號換行的相關規定。

標準內容:

程式碼必須遵守 PSR-1

程式碼必須使用4個空格來進行縮排,而不是用製表符

一行程式碼的長度不應有硬限制;軟限制必須為120個限制字符,建議每行代碼80個字符或更少

在命名空間的聲明下面必須有一行空行,並且在use的聲明下面也必須有一行空行

類的左花括號必須放到其聲明下面自成一行,右花括號則必須放到類別主體下面自成一行

方法的左花括號必須放到其聲明下面自成一行,右花括號則必須放到方法主體的下一行

所有的屬性和方法必須有可見性宣告;abstract和final聲明必須在可見性宣告之前;而static宣告必須在​​可見性宣告之後

在結構控制關鍵字的後面必須有一個空格;而方法和函式呼叫時後面不可有空格

結構控制的左花括號必須跟其放在同一行,右花括號必須放在該結構控製程式碼主體的下一行

控制結構的左括號之後不可有空格,右括號之前也不可有空格

PSR-3(Logger Interface)

PSR-3是應用程式日誌類別的透過介面的定義(原文:官網、GitHub)。內容很簡單,就是一個接口,官方範例程式碼引用一下就好了。當然,在具體的應用中,只要遵循該接口,肯定可以定制相應的實現。

基礎內容:

LoggerInterface暴露八個介面用來記錄八個等級(debug, info, notice, warning, error, critical, alert, emergency)的日誌。

第 九個方法是log,接受日誌等級作為第一個參數。用一個日誌等級常數來呼叫這個方法必須和直接呼叫指定等級方法的結果一致。用一個本規範中未定義且不為具 體實作所知的日誌等級來呼叫該方法必須拋出一個PsrLogInvalidArgumentException。不建議使用自訂的日誌等級,除非你 非常確定目前類別庫對其有所支援。

PSR-4(Improved Autoloading)

PSR-4即改進版的自動載入規格(原文:官網、GitHub)。它是PSR-0規範的接替者。它可以與任何其它的自動加載規範相容,包括PSR-0。

內容:

術語「類」是一個泛稱;它包含類,接口,traits 以及其他類似的結構;

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

完全合規類別名稱必須有一個頂層命名空間(Vendor Name)

完全合規類別名稱可以有一個頂層命名空間

完全合規類別名稱應該有一個終止類別名稱

下劃線在完全合規類別名稱中是沒有特殊意義的

字母在完全合規類別名稱中可以是任何大小寫的組合

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

當從完全合規類別名稱載入檔案時:

在完全合規類別名稱中,連續的一個或幾個子命名空間構成的命名空間前綴(不包括頂級命名空間的分隔符),至少對應著至少一個基礎目錄

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

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

自動載入器的實作不可拋出任何異常,不可引發任何等級的錯誤;也不應回傳值

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24
如果session_start()被多次調用會發生什麼? 如果session_start()被多次調用會發生什麼? Apr 25, 2025 am 12:06 AM

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

IIS和PHP的兼容性:深度潛水 IIS和PHP的兼容性:深度潛水 Apr 22, 2025 am 12:01 AM

IIS和PHP可以兼容,通過FastCGI實現。 1.IIS通過配置文件將.php文件請求轉發給FastCGI模塊。 2.FastCGI模塊啟動PHP進程處理請求,提高性能和穩定性。 3.實際應用中需注意配置細節、錯誤調試和性能優化。

session_start()函數的意義是什麼? session_start()函數的意義是什麼? May 03, 2025 am 12:18 AM

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

作曲家:通過AI的幫助開發PHP 作曲家:通過AI的幫助開發PHP Apr 29, 2025 am 12:27 AM

AI可以幫助優化Composer的使用,具體方法包括:1.依賴管理優化:AI分析依賴關係,建議最佳版本組合,減少衝突。 2.自動化代碼生成:AI生成符合最佳實踐的composer.json文件。 3.代碼質量提升:AI檢測潛在問題,提供優化建議,提高代碼質量。這些方法通過機器學習和自然語言處理技術實現,幫助開發者提高效率和代碼質量。

如何使用MySQL的函數進行數據處理和計算 如何使用MySQL的函數進行數據處理和計算 Apr 29, 2025 pm 04:21 PM

MySQL函數可用於數據處理和計算。 1.基本用法包括字符串處理、日期計算和數學運算。 2.高級用法涉及結合多個函數實現複雜操作。 3.性能優化需避免在WHERE子句中使用函數,並使用GROUPBY和臨時表。

H5:HTML5的關鍵改進 H5:HTML5的關鍵改進 Apr 28, 2025 am 12:26 AM

HTML5帶來了五個關鍵改進:1.語義化標籤提升了代碼清晰度和SEO效果;2.多媒體支持簡化了視頻和音頻嵌入;3.表單增強簡化了驗證;4.離線與本地存儲提高了用戶體驗;5.畫布與圖形功能增強了網頁的可視化效果。

作曲家:PHP開發人員的軟件包經理 作曲家:PHP開發人員的軟件包經理 May 02, 2025 am 12:23 AM

Composer是PHP的依賴管理工具,通過composer.json文件管理項目依賴。 1)解析composer.json獲取依賴信息;2)解析依賴關係形成依賴樹;3)從Packagist下載並安裝依賴到vendor目錄;4)生成composer.lock文件鎖定依賴版本,確保團隊一致性和項目可維護性。

怎樣在C  中使用type traits? 怎樣在C 中使用type traits? Apr 28, 2025 pm 08:18 PM

typetraits在C 中用於編譯時類型檢查和操作,提升代碼的靈活性和類型安全性。 1)通過std::is_integral和std::is_floating_point等進行類型判斷,實現高效的類型檢查和輸出。 2)使用std::is_trivially_copyable優化vector拷貝,根據類型選擇不同的拷貝策略。 3)注意編譯時決策、類型安全、性能優化和代碼複雜性,合理使用typetraits可以大大提升代碼質量。

See all articles