目前包括如下幾個規範:php
PSR-0(棄用)程序員
PSR-1框架
PSR-2函數
PSR-3編碼
PSR-4spa
1.PSR-0.net
自動加載規範,此規範已被啓用-本規範已於2014年10月21日被標記爲棄用,目前新的替代規範爲【PSR-4】debug
本文是爲自動加載器實現通用自動加載所須要遵循的編碼規範日誌
- 一個標準的命名空間與類名稱的定義必須符合如下結構:\<Vendor Name><Namespace>*(ClassName)
- 其中Vendor Name 爲每一個命名空間都必需要有的一個頂級命名空間名
- 須要的話,每一個命名空間下能夠擁有多個子命名空間
- 當根據完整的命名空間名從文件系統中載入類文件時,每一個命名空間之間的分隔符都會被轉換成文件夾路徑分隔符
- 類命名中的每一個_字符也會被轉換成文件夾路徑分隔符,而命名空間中的_字符則是無特殊含義的。
- 當從文件系統中載入標準的命名空間或類時,都將添加.php爲目標文件後綴
- 組織名稱(Vendor Name)、命名空間(Namespace)以及類的名稱(Class Name)可由任意大小寫字母組成。
2.PSR-1代碼規範
基本代碼規範,本篇規範制定了代碼基本元素的相關標準,以確保共享的PHP代碼間具備較高程度的技術互通性。
關鍵詞 「必須」(MUST)、「必定不可、必定不能」(MUST NOT)、「須要」(REQUIRED)、「將會」(SHALL)、「不會」(SHALL NOT)、「應該」(SHOULD)、「不應」(SHOULD NOT)、「推薦」(RECOMMENDED)、「能夠」(MAY)和「可選」(OPTIONAL)
- PHP代碼文件必須以<?php 或<?= 標籤開頭
- PHP代碼文件必須以不帶BOM的UTF-8編碼 【推薦閱讀:utf-8與utf-8(無BOM)的區別】
- PHP代碼中應該只定義類、函數、常量等聲明,或其餘會產生從屬效應的操做(生成文件輸出以及修改.ini配置文件等),兩者只能選其一
- 命名空間以及類必須符合PSR的自動加載規範:PSR-4;
- 類的命名必須遵循StudlyCaps大寫開頭的駝峯命名規範;
- 類中的常量全部字母都必須大寫,單詞間用下劃線分隔;
- 方法名稱必須符合camelCase式的小寫開頭駝峯命名規範
3.PSR-2
代碼風格規範,本篇規範是PSR-1基本代碼規範的額繼承與擴展。本規範但願經過制定一系列規範化PHP代碼規範,以減小在瀏覽不一樣做者的代碼時,因代碼風格的不一樣而形成不便。當多名程序員子啊多個項目中合做時,就須要一個共同的編碼規範,而本文中的風格規範源自於多個不一樣項目代碼風格的共同特性。所以,本規範的價值在於咱們都遵循這個編碼風格,而不是在於它自己。
- 代碼必須遵循PSR-1中的編碼規範
- 代碼必須使用四個空格符而不是tab鍵進行縮進。
- 每行的字符數應該軟性保持在80個內,理論上不可多於120個,但必定不能由硬性限制
- 每一個namespace命名空間聲明語句和use聲明語句塊後面,必須插入一個空白行
- 類的開始花名號({)必須在函數聲明後自成一行,結束花名號(})也必須在函數主體後自成一行
- 類的屬性和方法必須添加訪問修飾符(private protected以及public),abstract以及final必須聲明在訪問修飾符以前,而static必須聲明在訪問修飾符以後。
- 控制結構的關鍵字後必需要有一個空格符,而調用方法或函數時則必定不能有。
- 控制結構的開始花括號({)必須寫在聲明的同一行,而結束花括號(})必須寫在主體後自成一行。
- 控制結構的開始左括號後和結束右括號前,都必定不能有空格符。
4.PSR-3
日誌接口規範。本規範的主要目的,是爲了讓日誌類庫以簡單通用的方式,經過接收一個Psr\Log\LoggerInterface對象,來記錄日誌信息。框架以及CMS內容管理系統若有須要,能夠對此接口進行擴展,但須遵循本規範,才能保證使用第三方的類庫文件時,日誌接口仍能正常對接。
- LoggerInterface 接口對外定義了八個方法,分別用來記錄RFC 5424中定義的八個登記日誌:debug、info、notice、warning、error、critical、alert以及emergency。
- 第九個方法-log,其第一個參數爲記錄的等級,可以使用一個預先定義的等級常量做爲參數來調用此方法,必須與直接調用以上八個方法具備相同的效果。若是傳入的等級常量參數沒有預先定義,就必須拋出Psr\Log\InvalidArgumentException類型的異常,在不肯定的狀況下,使用者不應使用爲支持的等級常量來調用此方法。
5.
PSR-4
Autoloader 本PSR是關於由文件路徑自動載入對應的類的相關規範,本規範是可互操做的。能夠做爲任一自動載入規範的補充,其中包括PSR-0,此外,本PSR還包括自動載入的類對應的文件存放路徑規範。
- 此處的「類」泛指全部的class類、接口、traits可複用代碼塊以及其餘相似結構。
- 一個完整的類名須要具備如下結構
- \<命名空間>(\<子命名空間>)*\<類名>
- 1.完整的類名必需要有一個頂級命名空間,被稱爲「Vendor namespace」
- 2.完成的類名能夠有一個或多個子命名空間
- 3.完整的類名必須有一個最終的類名
- 4.完整的類名中任意一部分中的下劃線都是沒有特殊意義的
- 5.完整的類名能夠由任意大小寫字母組成
- 6.全部類名都必須是大小寫敏感的
- 當根據完整的類名載入相應的文件......
- 1.完整的類名中,去掉最前面的命名空間分隔符,前面連續的一個或多個命名空間和子命名空間,做爲「命名空間前綴」,其必須與至少一個「文件基目錄」相對應。
- 2.緊接命名空間前綴後的子命名空間必須與相對應的「文件基目錄」相匹配,其中的命名空間分隔符做爲目錄分割符
- 3.末尾的類名必須與對應的.php爲後綴的文件同名
- 4.自動加載器(autoloader)的實現必定不能拋出異常,必定不能觸發任一級別的錯誤信息以及不該該有返回值。