摘要:編碼樣式指南翻譯薛粲授權(quán)許可這份文檔是的非官方譯文。編碼樣式指南擴展和擴充了基礎(chǔ)編碼規(guī)范。概述代碼必須遵循一份編碼樣式指南。行不得對行寬設(shè)置硬性限制。對行寬的軟性限制必須是個字符超出時自動樣式檢查必須發(fā)出警告但不得產(chǎn)生錯誤。
PSR-2:編碼樣式指南
翻譯:薛粲
授權(quán)許可:CC BY-NC 4.0
這份文檔是《PSR-2: Coding Style Guide》的非官方譯文。
《PSR-2:編碼樣式指南》擴展和擴充了《PSR-1:基礎(chǔ)編碼規(guī)范》。
這份指南的初衷是減少當(dāng)我們閱讀不同作者編寫的代碼時遇到的認(rèn)知差異。它期望通過列舉了一組可供共同遵循的規(guī)則用于格式化 PHP 源代碼來實現(xiàn)這一目的。
英文原文使用的關(guān)鍵詞 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", 以及 "OPTIONAL" 遵循 RFC 2119 的描述。譯文中根據(jù)上下文可能會使用不同的詞匯來對應(yīng)這些關(guān)鍵詞,并加粗顯示。
1. 概述代碼必須遵循一份 PSR 編碼樣式指南 PSR-1。
代碼必須使用 4 個空格而不是制表符作為縮進。
不得對行寬進行硬性限制;軟性限制必須是 120 個字符;每行應(yīng)該包含 80 個或者更少的字符。
在 namespace 聲明之后必須有一個空行,在 use 聲明之后也必須有一個空行。
類的左花括號必須在下一行,右花括號必須在內(nèi)容后的下一行。
方法的左花括號必須在下一行,右花括號必須在內(nèi)容后的下一行。
必須為所有屬性和方法聲明訪問控制;abstract 和 final 必須在訪問控制之前;static 必須在訪問控制之后。
在控制結(jié)構(gòu)的保留字后必須有一個空格;在方法和函數(shù)調(diào)用之后不得有空格。
控制結(jié)構(gòu)的左花括號必須在同一行,右花括號必須在內(nèi)容后的下一行。
控制結(jié)構(gòu)的左括號之后不得有空格,右括號之前不得有空格。
1.1 示例這個例子作為一個簡明的示例,涵蓋了一些后面提及的規(guī)則:
$b) { $foo->bar($arg1); } else { BazClass::bar($arg2, $arg3); } } final public static function bar() { // 方法內(nèi)容 } }2. 通用規(guī)則 2.1 基礎(chǔ)編碼標(biāo)準(zhǔn)
代碼必須遵循 PSR-1 規(guī)范列出的所有規(guī)則。
2.2 文件所有 PHP 源文件必須使用 Unix LF (linefeed) 作為換行符。
所有 PHP 源文件必須以一個空行結(jié)束。
對于只包含 PHP 的文件,必須省略用于指示 PHP 段結(jié)束的 ?> 標(biāo)記。
2.3. 行不得對行寬設(shè)置硬性限制。
對行寬的軟性限制必須是 120 個字符;超出時自動樣式檢查必須發(fā)出警告但不得產(chǎn)生錯誤。
行不應(yīng)該超過 80 個字符;超過的行應(yīng)該分割為多個不超過 80 個字符的行。
非空的行不得以空白字符結(jié)束。
可以添加空行用于指出代碼塊的關(guān)聯(lián)性以提升代碼的可讀性。
一行不得包含超過一個語句。
2.4. 縮進代碼必須使用 4 個空格用于縮進,不得使用制表符用于縮進。
只使用空格,不混用空格和制表符,能夠幫助避免查看差異、打補丁、查看歷史以及批注時潛在的問題。使用空格還讓跨行對齊時插入細粒度的子縮進更加容易。
2.5. 保留字和 True/False/NullPHP 保留字必須使用小寫。
PHP 常量 true、false 以及 null 必須使用小寫。
3. Namespace 和 Use 聲明如果存在,必須在 namespace 聲明后加一個空行。
如果存在,所有 use 聲明必須在 namespace 聲明之后。
每個聲明必須要有一個 use 保留字。
在 use 塊之后必須有一個空行。
例如:
4. 類、屬性和方法術(shù)語“類”指代所有的類、接口和 trait。
4.1. Extends 和 Implements保留字 extends 和 implements 必須與類名位于同一行。
類的起始花括號必須獨自一行;結(jié)束花括號必須在內(nèi)容結(jié)束后的下一行。
implements 列表可以分割為多行,這些行縮進一次。當(dāng)這樣做時,第一個條目必須在下一行,且每行必須只包含一個接口。
4.2. 屬性必須為所有屬性聲明訪問控制。
不得使用保留字 var 聲明屬性。
一條語句不得聲明超過一個屬性。
不應(yīng)該使用單個下劃線作為 protected 或 private 屬性的訪問控制的前綴。
屬性聲明看類似下面的例子。
4.3. 方法必須為所有方法聲明訪問控制。
不應(yīng)該使用單個下劃線作為 protected 或 private 方法的訪問控制的前綴。
方法名后不得使用空格。左花括號必須獨占一行,右花括號必須在內(nèi)容之后的行。左括號后不得緊接一個空格,右括號前不得放置一個空格。
方法的聲明類似下面的示例。請留意其中括號、逗號、空格以及花括號的位置:
4.4. 方法參數(shù)參數(shù)列表中,每個逗號之前不得有空格,逗號之后必須跟著一個空格。
具有默認(rèn)值的方法參數(shù)必須位于參數(shù)列表的最后面。
參數(shù)列表可以分割為多行,這些行只需縮進一次。當(dāng)使用這種方式的時候,列表中的第一個參數(shù)必須位于新行,且每行必須只包含一個參數(shù)。
當(dāng)參數(shù)列表被分割為多行時,右括號和左花括號必須放在同一行,中間用一個空格隔開。
4.5. abstract、final 以及 static如果存在,abstract 和 final 聲明必須出現(xiàn)在訪問控制聲明之前。
如果存在,static 聲明必須出現(xiàn)在訪問控制聲明之后。
4.6. 方法和函數(shù)調(diào)用當(dāng)進行一個方法或函數(shù)調(diào)用時,在方法名或函數(shù)名與左括號之間不得用空格隔開,左括號之后不得有空格。參數(shù)列表中,每個逗號前不得有空格,每個逗號之后必須有個空格。
bar($arg1); Foo::bar($arg2, $arg3);參數(shù)列表可以分割為多行,這些行只需縮進一次。當(dāng)使用這種方式的時候,列表中的第一個參數(shù)必須位于新行,且每行必須只包含一個參數(shù)。
bar( $longArgument, $longerArgument, $muchLongerArgument );5. 控制結(jié)構(gòu)與控制結(jié)構(gòu)相關(guān)的基本樣式原則如下:
控制結(jié)構(gòu)保留字之后必須有一個空格
左括號之后不得有空格
右括號之前不得有空格
右括號和左花括號直接必須有一個空格
結(jié)構(gòu)體必須縮進一次
右花括號必須在內(nèi)容后的下一行
每個結(jié)構(gòu)的內(nèi)容必須使用花括號包裹。這能讓控制結(jié)構(gòu)看起來更加標(biāo)準(zhǔn),并能減少向結(jié)構(gòu)體中加入新語句導(dǎo)致錯誤的可能性。
5.1. if、elseif 和 else一個 if 結(jié)構(gòu)看起來形如下面的示例。請留意其中括號、空格以及花括號的位置;留意 else 和 elseif 與之前內(nèi)容的右花括號位于同一行。
應(yīng)該使用保留字 elseif 代替 else if,這樣,所有控制結(jié)構(gòu)的保留字看起來都是單個單詞。
5.2. switch 和 case一個 switch 結(jié)構(gòu)看起來形如下面的示例。請留意其中括號、空格以及花括號的位置。case 語句必須相對 switch 縮進一次,保留字 break (或其它用于終止的保留字)必須與 case 塊的縮進層次相同。當(dāng) case 塊中穿透行為是設(shè)計需要的時候,必須添加類似 // no break 的注釋。
5.3. while 和 do while一個 while 語句看起來形如下面的示例。請留意其中括號、空格以及花括號的位置。
類似的,do while 語句看起來形如下面的示例。請留意其中括號、空格以及花括號的位置。
5.4. for一個 for 語句看起來形如下面的示例。請留意其中括號、空格以及花括號的位置。
5.5. foreach一個 foreach 語句看起來形如下面的示例。請留意其中括號、空格以及花括號的位置。
$value) { // foreach body }5.6. try 和 catch一個 try catch 塊看起來形如下面的示例。請留意其中括號、空格以及花括號的位置。
6. 閉包閉包聲明中保留字 function 之后必須有一個空格,保留字 use 前后必須各有一個空格。
左花括號必須與閉包聲明同一行,右花括號必須在內(nèi)容結(jié)束后另起一行。
參數(shù)表和變量表的左括號之后不得留空格,右括號之前不得留空格。
參數(shù)表和變量表中逗號之前不得留空格,逗號之后必須留有一個空格。
閉包中具有默認(rèn)值的參數(shù)必須位于參數(shù)表的最后。
一個閉包聲明看起來形如下面的示例。請留意其中括號、逗號、空格以及花括號的位置。
$closureWithArgs = function ($arg1, $arg2) { // body }; $closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) { // body };參數(shù)表和變量表可以跨行書寫,后續(xù)的行縮進一次。當(dāng)這么做時,每行必須只包含一個參數(shù)或變量。
當(dāng)最后的列表(不管是參數(shù)表還是變量表)跨行書寫時,右括號和左花括號必須放在同一行,用一個空格隔開。
下面的示例分別展示了參數(shù)表和變量表跨行書寫的各種情況下應(yīng)該是怎樣的。
請注意這條格式規(guī)則也適用于閉包被直接在函數(shù)或方法調(diào)用中作為參數(shù)的情況。
bar( $arg1, function ($arg2) use ($var1) { // body }, $arg3 );7. 后記這份規(guī)范有意的忽略了一些樣式和實踐準(zhǔn)則,這些內(nèi)容包括但不限于:
全局變量和全局常量的聲明
函數(shù)的聲明
操作符和賦值
跨行對齊
注釋和文檔塊
類名的前綴和后綴
最佳實踐
后續(xù)的推薦標(biāo)準(zhǔn)可以修訂和擴展這份指南來涵蓋這部分或更多其它的樣式和實踐準(zhǔn)則。
附錄 A:問卷調(diào)查在起草這份指南是,PHP FIG 小組對其有成員項目進行了問卷調(diào)查以決定哪些實踐行為是最普遍的。原文在附錄中包含了問卷調(diào)查的情況,譯文略。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/21467.html
摘要:公認(rèn)規(guī)范總結(jié)規(guī)范中文版大部分來源翻譯部分包含例子,附錄包含了一些規(guī)范的實現(xiàn)基本編碼標(biāo)準(zhǔn)編碼風(fēng)格指南日志接口規(guī)范自動加載規(guī)范規(guī)范英文版未使用草案已棄用規(guī)范原理實現(xiàn)實現(xiàn)自動加載實現(xiàn)原理資料來源與參考 PSR公認(rèn)規(guī)范總結(jié) PSR規(guī)范中文版(大部分來源google翻譯)(cn) 部分psr包含例子,附錄包含了一些規(guī)范的實現(xiàn) PSR-1:基本編碼標(biāo)準(zhǔn) PSR-2:編碼風(fēng)格指南 PSR-3:日志...
摘要:前言試問現(xiàn)在的碼農(nóng)對規(guī)范了解多少。寫了幾年代碼的我,居然因不了解規(guī)范被鄙視特此來交下學(xué)費網(wǎng)上資料有很多,本文只做鏈接指引什么是是的簡稱,這個是組織制定的一套規(guī)范。 前言 試問現(xiàn)在php的碼農(nóng)對psr規(guī)范了解多少。 寫了幾年代碼的我,居然因不了解規(guī)范被鄙視!特此來交下學(xué)費 網(wǎng)上資料有很多,本文只做鏈接指引 什么是PSR PSR是PHP Standards Recommendatio...
摘要:標(biāo)準(zhǔn)規(guī)范簡介是的簡寫,由組織制定的規(guī)范,是開發(fā)的實踐標(biāo)準(zhǔn)。具體標(biāo)準(zhǔn)有有了統(tǒng)一編碼風(fēng)格規(guī)范,更有利于查看和學(xué)習(xí)各個框架或類庫,不不需要每次都適應(yīng)新的編碼風(fēng)格。同時在開發(fā)團隊內(nèi)部使用統(tǒng)一的編碼規(guī)范更有利于代碼審查版本控制團隊內(nèi)部交流。 PHP 標(biāo)準(zhǔn)規(guī)范 PSR PSR 簡介 PSR 是 PHP Standard Recommendations 的簡寫,由 PHP FIG 組織制定的 PHP...
摘要:為了成為一個專家,他必須先成為中級者。它非常適合于急于求成或者沒有太多技術(shù)的人,但掌握絕對無法使你成為一個專業(yè)的開發(fā)者它使用意大利面條式的編碼,教你的是不合適的設(shè)計原則。 這一篇文章是Becoming a PHP Professional系列 4 篇博文中的第 1 篇。 當(dāng)瀏覽各類與PHP相關(guān)的博客時,比如Quora上的問題,谷歌群組,簡訊和雜志,我經(jīng)常注意到技能的等級分化。問題都類...
摘要:注本文算是筆者對規(guī)范翻譯學(xué)習(xí)筆記,之后會陸續(xù)翻譯剩余的規(guī)范,可能翻譯的有錯誤的地方,希望讀者能夠指正,非常感謝什么是是標(biāo)準(zhǔn)建議的簡寫,是由組織框架交互操作組織提出。的工作是尋找項目之間的共性,以及讓開發(fā)者能更好協(xié)同工作的方式。 注:本文算是筆者對PSR規(guī)范翻譯/學(xué)習(xí)筆記,之后會陸續(xù)翻譯剩余的規(guī)范,可能翻譯的有錯誤的地方,希望讀者能夠指正,非常感謝. 什么是PSR? ? ??? PSR是...
閱讀 2550·2021-10-11 10:58
閱讀 1031·2019-08-29 13:58
閱讀 1670·2019-08-26 13:32
閱讀 834·2019-08-26 10:40
閱讀 3261·2019-08-26 10:18
閱讀 1761·2019-08-23 14:18
閱讀 1110·2019-08-23 10:54
閱讀 440·2019-08-22 18:39