PHP-PSR規(guī)范

PSR 是 PHP Standard Recommendations 的簡寫,由?PHP FIG?組織制定的 PHP 規(guī)范迫吐,是 PHP 開發(fā)的實踐標準闲延。

PHP FIG颂翼,F(xiàn)IG 是 Framework Interoperability Group(框架可互用性小組)的縮寫,由幾位開源框架的開發(fā)者成立于 2009 年剥槐,從那開始也選取了很多其他成員進來(包括但不限于?Laravel,?Joomla,?Drupal,?Composer,?Phalcon,?Slim,?Symfony,?Zend Framework?等)唱歧,雖然不是「官方」組織,但也代表了大部分的 PHP 社區(qū)才沧。

項目的目的在于:通過框架作者或者框架的代表之間討論迈喉,以最低程度的限制,制定一個協(xié)作標準温圆,各個框架遵循統(tǒng)一的編碼規(guī)范挨摸,避免各家自行發(fā)展的風格阻礙了 PHP 的發(fā)展,解決這個程序設計師由來已久的困擾岁歉。

目前已表決通過了 6 套標準得运,已經得到大部分 PHP 框架的支持和認可。




==PSR-0(自動加載規(guī)范)==

PSR-0(Autoloading Standard)類自動加載規(guī)范锅移,該規(guī)范現(xiàn)已廢棄(Deprecated)熔掺,它將由PSR-4替代。

1.一個完全合格的命名空間和類名必須遵循以下結構 "\VendorName\Namespace\ClassName"

2.每個命名空間必須有頂級的命名空間 "VendorName"

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

4.每個命名空間在被文件系統(tǒng)加載時必須被轉換為操作系統(tǒng)路徑分隔符 (DIRECTORY_SEPARATOR)

5.每個"_"字符在"類名"中被轉換為DIRECTORY_SEPARATOR非剃。而在 PSR-4 中使用下劃線沒有任何特殊含義

6.符合命名標準的命名空間和類名必須以".php"結尾來加載文件

7.命名空間和類名可以由大小寫字母組成置逻,但必須對大小寫敏感以保證多系統(tǒng)兼容性

==PSR-1(基本代碼規(guī)范)==

PSR-1(Basic Coding Standard)基本代碼規(guī)范,用以確保共享的PHP代碼間具有較高程度的技術互通性备绽。

1.PHP代碼源文件必須以<?php 或 <?= 標簽開始

2.PHP代碼源文件必須使用不帶 BOM 的 UTF-8 編碼

3.一個源文件建議只用作定義類券坞、函數(shù)鬓催、常量等聲明,或者其他產生從屬效應的操作(如:輸出信息恨锚,修改配置文件等)

4.命名空間以及類必須符合 PSR 的自動加載規(guī)范:PSR-0 或 PSR-4

5.類的命名必須遵循 StudlyCaps 大寫開頭的駝峰式命名規(guī)范

6.類中的常量所有字母都必須大寫宇驾,單詞間用下劃線分隔

7.方法名必須符合 camelCase 式的小寫開頭駝峰式命名規(guī)范

* BOM(byte order mark)是 Unicode 標準的一部分,通常用于標記純文本字節(jié)序(byte order)猴伶,使得文本處理程序能夠識別讀入的文件使用的 Unicode 編碼(UTF-8课舍、UTF-16、UTF-32)他挎。

* 從屬效應是指僅僅通過包含文件筝尾,不直接聲明類、函數(shù)和常量而執(zhí)行的邏輯操作办桨。一份PHP源文件應該要么就只包含不產生從屬效應的定義操作忿等,要么就包含只會產生從屬效應的邏輯操作,切勿同時包含兩者崔挖。

==PSR-2(代碼風格規(guī)范)==

?PSR-2(Coding Style Guide)代碼風格規(guī)范贸街,通過制定一系列規(guī)范化PHP代碼的規(guī)則,以減少因代作者碼風格不同而造成的閱讀不便狸相。

1.代碼必須遵循 PSR-1 中的編碼規(guī)范

2.代碼必須使用4個空格來進行縮進薛匪,而非制表符(TAB)

3.建議每行代碼字符數(shù)保持在80個以內,理論上不可多于120個脓鹃,但不做硬性限制

4.每個 namespace 命名空間語句和 use 聲明語句塊后面必須插入一個空白行

5.類的左花括號 "{" 必須寫在聲明后自成一行逸尖,右花括號 "}" 也必須在類主體下自成一行

6.方法的左花括號 "{" 必須放在聲明后自成一行,右花括號 "}" 也必須于主體下自成一行

7.類的屬性和方法必須添加訪問修飾符(private瘸右、protected娇跟、public),abstract 以及 final 必須聲明在訪問修飾符之前太颤,而 static 必須聲明在訪問修飾符之后(例:final public static)

8.在控制結構關鍵字的后面必須有一個空格苞俘,而調用方法或函數(shù)時一定不能有(控制結構:if-else、switch-case龄章、try-catch吃谣、while、foreach ...)

9.控制結構的左花括號 "{" 必須跟其處于同一行做裙,右花括號 "}" 必須在控制結構主體之后自成一行

10.控制結構的開始左括號之后岗憋,和結束右括號之前都不可以有空格

==PSR-3(日志接口規(guī)范)==

PSR-3(Logger Interface)日志接口規(guī)范,主要目的是為了讓日志類庫通過接收一個 LoggerInterface 對象來記錄日志信息锚贱。

1.LoggerInterface 接口對外定義了八個方法仔戈,分別用來記錄 RFC 5424 中定義的八個等級的日志:debug、info、notice监徘、warning悍缠、error、critical耐量、alert、emergency

2.第九個方法 log()滤港,第一個參數(shù)為記錄等級廊蜒。可使用一個預先定義的等級常量作為參數(shù)來調用此方法溅漾,必須與直接調用以上八個方法具有相同的效果山叮。如果傳入的等級常量沒有預先定義,則必須拋出 psr\Log\InvalidArgumentException 類型的異常添履。不推薦使用自定義的日志等級屁倔,除非你非常確定當前類庫對其有所支持。

==PSR-4(自動加載新規(guī))==

PSR-4(Improved Autoloading)本規(guī)范是關于自動載入對應類的相關規(guī)范暮胧,是 PSR-0 自動加載規(guī)范的補充锐借。

1.此處的“類”是一個泛稱,它包含類往衷、接口钞翔、traits 以及其他類似的結構

2.完全限定類名需要遵循以下結構:\<命名空間>(\<子命名空間>)*\<類名>

  * 完全限定類名必須要有一個頂級命名空間,被稱為 "vendor namespace"席舍;

  * 完全限定類名可以有一個或多個子命名空間布轿;

  * 完全限定類名必須有一個終止類名;

  * 完全限定類名中任意一部分中的下劃線都沒有特殊含義来颤;

  * 完全限定類名可以由任意大小寫字母組成汰扭;

 ????* 完全限定類名必須以大小寫敏感的方式引用;

3.當根據(jù)完整的類名載入相應的文件時:

  * 完全限定類名中福铅,連續(xù)的一個或幾個子命名空間構成的命名空間前綴(不包括頂級命名空間的分隔符)萝毛,至少對應著至少一個基礎目錄;

? ? ? ?* 緊接命名空間前綴后的子命名空間必須與相應的”文件基目錄“相匹配滑黔,其中的命名空間分隔符將作為目錄分隔符珊泳;

  * 終止類名對應一個以 .php 結尾的文件,文件名必須和終止類名大小寫匹配拷沸;

4.自動加載器(autoloader)的實現(xiàn)不能拋出異常色查,不可引發(fā)任一級別錯誤,也不應該有返回值

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末撞芍,一起剝皮案震驚了整個濱河市秧了,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌序无,老刑警劉巖验毡,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衡创,死亡現(xiàn)場離奇詭異,居然都是意外死亡晶通,警方通過查閱死者的電腦和手機璃氢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狮辽,“玉大人一也,你說我怎么就攤上這事『聿保” “怎么了椰苟?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長树叽。 經常有香客問我舆蝴,道長,這世上最難降的妖魔是什么题诵? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任洁仗,我火速辦了婚禮,結果婚禮上性锭,老公的妹妹穿的比我還像新娘京痢。我一直安慰自己,他們只是感情好篷店,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布祭椰。 她就那樣靜靜地躺著,像睡著了一般疲陕。 火紅的嫁衣襯著肌膚如雪方淤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天蹄殃,我揣著相機與錄音携茂,去河邊找鬼。 笑死诅岩,一個胖子當著我的面吹牛讳苦,可吹牛的內容都是我干的。 我是一名探鬼主播吩谦,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼鸳谜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了式廷?” 一聲冷哼從身側響起咐扭,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蝗肪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袜爪,經...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年薛闪,在試婚紗的時候發(fā)現(xiàn)自己被綠了辛馆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡豁延,死狀恐怖昙篙,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情术浪,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布寿酌,位于F島的核電站胰苏,受9級特大地震影響,放射性物質發(fā)生泄漏醇疼。R本人自食惡果不足惜硕并,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秧荆。 院中可真熱鬧倔毙,春花似錦、人聲如沸乙濒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颁股。三九已至么库,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甘有,已是汗流浹背诉儒。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亏掀,地道東北人忱反。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像滤愕,于是被迫代替她去往敵國和親温算。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內容