亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

PSR-2:編碼樣式指南

K_B_Z / 765人閱讀

摘要:編碼樣式指南翻譯薛粲授權(quán)許可這份文檔是的非官方譯文。編碼樣式指南擴(kuò)展和擴(kuò)充了基礎(chǔ)編碼規(guī)范。概述代碼必須遵循一份編碼樣式指南。行不得對(duì)行寬設(shè)置硬性限制。對(duì)行寬的軟性限制必須是個(gè)字符超出時(shí)自動(dòng)樣式檢查必須發(fā)出警告但不得產(chǎn)生錯(cuò)誤。

PSR-2:編碼樣式指南

翻譯:薛粲
授權(quán)許可:CC BY-NC 4.0

這份文檔是《PSR-2: Coding Style Guide》的非官方譯文。

《PSR-2:編碼樣式指南》擴(kuò)展和擴(kuò)充了《PSR-1:基礎(chǔ)編碼規(guī)范》。

這份指南的初衷是減少當(dāng)我們閱讀不同作者編寫(xiě)的代碼時(shí)遇到的認(rèn)知差異。它期望通過(guò)列舉了一組可供共同遵循的規(guī)則用于格式化 PHP 源代碼來(lái)實(shí)現(xiàn)這一目的。

英文原文使用的關(guān)鍵詞 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", 以及 "OPTIONAL" 遵循 RFC 2119 的描述。譯文中根據(jù)上下文可能會(huì)使用不同的詞匯來(lái)對(duì)應(yīng)這些關(guān)鍵詞,并加粗顯示。

1. 概述

代碼必須遵循一份 PSR 編碼樣式指南 PSR-1。

代碼必須使用 4 個(gè)空格而不是制表符作為縮進(jìn)。

不得對(duì)行寬進(jìn)行硬性限制;軟性限制必須是 120 個(gè)字符;每行應(yīng)該包含 80 個(gè)或者更少的字符。

namespace 聲明之后必須有一個(gè)空行,在 use 聲明之后也必須有一個(gè)空行。

類的左花括號(hào)必須在下一行,右花括號(hào)必須在內(nèi)容后的下一行。

方法的左花括號(hào)必須在下一行,右花括號(hào)必須在內(nèi)容后的下一行。

必須為所有屬性和方法聲明訪問(wèn)控制;abstractfinal 必須在訪問(wèn)控制之前;static 必須在訪問(wèn)控制之后。

在控制結(jié)構(gòu)的保留字后必須有一個(gè)空格;在方法和函數(shù)調(diào)用之后不得有空格。

控制結(jié)構(gòu)的左花括號(hào)必須在同一行,右花括號(hào)必須在內(nèi)容后的下一行。

控制結(jié)構(gòu)的左括號(hào)之后不得有空格,右括號(hào)之前不得有空格。

1.1 示例

這個(gè)例子作為一個(gè)簡(jiǎn)明的示例,涵蓋了一些后面提及的規(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 源文件必須以一個(gè)空行結(jié)束。

對(duì)于只包含 PHP 的文件,必須省略用于指示 PHP 段結(jié)束的 ?> 標(biāo)記。

2.3. 行

不得對(duì)行寬設(shè)置硬性限制。

對(duì)行寬的軟性限制必須是 120 個(gè)字符;超出時(shí)自動(dòng)樣式檢查必須發(fā)出警告但不得產(chǎn)生錯(cuò)誤。

不應(yīng)該超過(guò) 80 個(gè)字符;超過(guò)的行應(yīng)該分割為多個(gè)不超過(guò) 80 個(gè)字符的行。

非空的行不得以空白字符結(jié)束。

可以添加空行用于指出代碼塊的關(guān)聯(lián)性以提升代碼的可讀性。

一行不得包含超過(guò)一個(gè)語(yǔ)句。

2.4. 縮進(jìn)

代碼必須使用 4 個(gè)空格用于縮進(jìn),不得使用制表符用于縮進(jìn)。

只使用空格,不混用空格和制表符,能夠幫助避免查看差異、打補(bǔ)丁、查看歷史以及批注時(shí)潛在的問(wèn)題。使用空格還讓跨行對(duì)齊時(shí)插入細(xì)粒度的子縮進(jìn)更加容易。

2.5. 保留字和 True/False/Null

PHP 保留字必須使用小寫(xiě)。

PHP 常量 truefalse 以及 null 必須使用小寫(xiě)。

3. Namespace 和 Use 聲明

如果存在,必須namespace 聲明后加一個(gè)空行。

如果存在,所有 use 聲明必須namespace 聲明之后。

每個(gè)聲明必須要有一個(gè) use 保留字。

use 塊之后必須有一個(gè)空行。

例如:


4. 類、屬性和方法

術(shù)語(yǔ)“類”指代所有的類、接口和 trait。

4.1. Extends 和 Implements

保留字 extendsimplements 必須與類名位于同一行。

類的起始花括號(hào)必須獨(dú)自一行;結(jié)束花括號(hào)必須在內(nèi)容結(jié)束后的下一行。


implements 列表可以分割為多行,這些行縮進(jìn)一次。當(dāng)這樣做時(shí),第一個(gè)條目必須在下一行,且每行必須只包含一個(gè)接口。


4.2. 屬性

必須為所有屬性聲明訪問(wèn)控制。

不得使用保留字 var 聲明屬性。

一條語(yǔ)句不得聲明超過(guò)一個(gè)屬性。

不應(yīng)該使用單個(gè)下劃線作為 protectedprivate 屬性的訪問(wèn)控制的前綴。

屬性聲明看類似下面的例子。


4.3. 方法

必須為所有方法聲明訪問(wèn)控制。

不應(yīng)該使用單個(gè)下劃線作為 protectedprivate 方法的訪問(wèn)控制的前綴。

方法名后不得使用空格。左花括號(hào)必須獨(dú)占一行,右花括號(hào)必須在內(nèi)容之后的行。左括號(hào)后不得緊接一個(gè)空格,右括號(hào)前不得放置一個(gè)空格。

方法的聲明類似下面的示例。請(qǐng)留意其中括號(hào)、逗號(hào)、空格以及花括號(hào)的位置:


4.4. 方法參數(shù)

參數(shù)列表中,每個(gè)逗號(hào)之前不得有空格,逗號(hào)之后必須跟著一個(gè)空格。

具有默認(rèn)值的方法參數(shù)必須位于參數(shù)列表的最后面。


參數(shù)列表可以分割為多行,這些行只需縮進(jìn)一次。當(dāng)使用這種方式的時(shí)候,列表中的第一個(gè)參數(shù)必須位于新行,且每行必須只包含一個(gè)參數(shù)。

當(dāng)參數(shù)列表被分割為多行時(shí),右括號(hào)和左花括號(hào)必須放在同一行,中間用一個(gè)空格隔開(kāi)。


4.5. abstract、final 以及 static

如果存在,abstractfinal 聲明必須出現(xiàn)在訪問(wèn)控制聲明之前。

如果存在,static 聲明必須出現(xiàn)在訪問(wèn)控制聲明之后。


4.6. 方法和函數(shù)調(diào)用

當(dāng)進(jìn)行一個(gè)方法或函數(shù)調(diào)用時(shí),在方法名或函數(shù)名與左括號(hào)之間不得用空格隔開(kāi),左括號(hào)之后不得有空格。參數(shù)列表中,每個(gè)逗號(hào)前不得有空格,每個(gè)逗號(hào)之后必須有個(gè)空格。

bar($arg1);
Foo::bar($arg2, $arg3);

參數(shù)列表可以分割為多行,這些行只需縮進(jìn)一次。當(dāng)使用這種方式的時(shí)候,列表中的第一個(gè)參數(shù)必須位于新行,且每行必須只包含一個(gè)參數(shù)。

bar(
    $longArgument,
    $longerArgument,
    $muchLongerArgument
);
5. 控制結(jié)構(gòu)

與控制結(jié)構(gòu)相關(guān)的基本樣式原則如下:

控制結(jié)構(gòu)保留字之后必須有一個(gè)空格

左括號(hào)之后不得有空格

右括號(hào)之前不得有空格

右括號(hào)和左花括號(hào)直接必須有一個(gè)空格

結(jié)構(gòu)體必須縮進(jìn)一次

右花括號(hào)必須在內(nèi)容后的下一行

每個(gè)結(jié)構(gòu)的內(nèi)容必須使用花括號(hào)包裹。這能讓控制結(jié)構(gòu)看起來(lái)更加標(biāo)準(zhǔn),并能減少向結(jié)構(gòu)體中加入新語(yǔ)句導(dǎo)致錯(cuò)誤的可能性。

5.1. ifelseifelse

一個(gè) if 結(jié)構(gòu)看起來(lái)形如下面的示例。請(qǐng)留意其中括號(hào)、空格以及花括號(hào)的位置;留意 elseelseif 與之前內(nèi)容的右花括號(hào)位于同一行。


應(yīng)該使用保留字 elseif 代替 else if,這樣,所有控制結(jié)構(gòu)的保留字看起來(lái)都是單個(gè)單詞。

5.2. switchcase

一個(gè) switch 結(jié)構(gòu)看起來(lái)形如下面的示例。請(qǐng)留意其中括號(hào)、空格以及花括號(hào)的位置。case 語(yǔ)句必須相對(duì) switch 縮進(jìn)一次,保留字 break (或其它用于終止的保留字)必須case 塊的縮進(jìn)層次相同。當(dāng) case 塊中穿透行為是設(shè)計(jì)需要的時(shí)候,必須添加類似 // no break 的注釋。


5.3. whiledo while

一個(gè) while 語(yǔ)句看起來(lái)形如下面的示例。請(qǐng)留意其中括號(hào)、空格以及花括號(hào)的位置。


類似的,do while 語(yǔ)句看起來(lái)形如下面的示例。請(qǐng)留意其中括號(hào)、空格以及花括號(hào)的位置。


5.4. for

一個(gè) for 語(yǔ)句看起來(lái)形如下面的示例。請(qǐng)留意其中括號(hào)、空格以及花括號(hào)的位置。


5.5. foreach

一個(gè) foreach 語(yǔ)句看起來(lái)形如下面的示例。請(qǐng)留意其中括號(hào)、空格以及花括號(hào)的位置。

 $value) {
    // foreach body
}
5.6. trycatch

一個(gè) try catch 塊看起來(lái)形如下面的示例。請(qǐng)留意其中括號(hào)、空格以及花括號(hào)的位置。


6. 閉包

閉包聲明中保留字 function 之后必須有一個(gè)空格,保留字 use 前后必須各有一個(gè)空格。

左花括號(hào)必須與閉包聲明同一行,右花括號(hào)必須在內(nèi)容結(jié)束后另起一行。

參數(shù)表和變量表的左括號(hào)之后不得留空格,右括號(hào)之前不得留空格。

參數(shù)表和變量表中逗號(hào)之前不得留空格,逗號(hào)之后必須留有一個(gè)空格。

閉包中具有默認(rèn)值的參數(shù)必須位于參數(shù)表的最后。

一個(gè)閉包聲明看起來(lái)形如下面的示例。請(qǐng)留意其中括號(hào)、逗號(hào)、空格以及花括號(hào)的位置。

$closureWithArgs = function ($arg1, $arg2) {
    // body
};

$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
    // body
};

參數(shù)表和變量表可以跨行書(shū)寫(xiě),后續(xù)的行縮進(jìn)一次。當(dāng)這么做時(shí),每行必須只包含一個(gè)參數(shù)或變量。

當(dāng)最后的列表(不管是參數(shù)表還是變量表)跨行書(shū)寫(xiě)時(shí),右括號(hào)和左花括號(hào)必須放在同一行,用一個(gè)空格隔開(kāi)。

下面的示例分別展示了參數(shù)表和變量表跨行書(shū)寫(xiě)的各種情況下應(yīng)該是怎樣的。


請(qǐng)注意這條格式規(guī)則也適用于閉包被直接在函數(shù)或方法調(diào)用中作為參數(shù)的情況。

bar(
    $arg1,
    function ($arg2) use ($var1) {
        // body
    },
    $arg3
);
7. 后記

這份規(guī)范有意的忽略了一些樣式和實(shí)踐準(zhǔn)則,這些內(nèi)容包括但不限于:

全局變量和全局常量的聲明

函數(shù)的聲明

操作符和賦值

跨行對(duì)齊

注釋和文檔塊

類名的前綴和后綴

最佳實(shí)踐

后續(xù)的推薦標(biāo)準(zhǔn)可以修訂和擴(kuò)展這份指南來(lái)涵蓋這部分或更多其它的樣式和實(shí)踐準(zhǔn)則。

附錄 A:?jiǎn)柧碚{(diào)查

在起草這份指南是,PHP FIG 小組對(duì)其有成員項(xiàng)目進(jìn)行了問(wèn)卷調(diào)查以決定哪些實(shí)踐行為是最普遍的。原文在附錄中包含了問(wèn)卷調(diào)查的情況,譯文略。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/21467.html

相關(guān)文章

  • php-psr-chinese psr規(guī)范總結(jié)

    摘要:公認(rèn)規(guī)范總結(jié)規(guī)范中文版大部分來(lái)源翻譯部分包含例子,附錄包含了一些規(guī)范的實(shí)現(xiàn)基本編碼標(biāo)準(zhǔn)編碼風(fēng)格指南日志接口規(guī)范自動(dòng)加載規(guī)范規(guī)范英文版未使用草案已棄用規(guī)范原理實(shí)現(xiàn)實(shí)現(xiàn)自動(dòng)加載實(shí)現(xiàn)原理資料來(lái)源與參考 PSR公認(rèn)規(guī)范總結(jié) PSR規(guī)范中文版(大部分來(lái)源google翻譯)(cn) 部分psr包含例子,附錄包含了一些規(guī)范的實(shí)現(xiàn) PSR-1:基本編碼標(biāo)準(zhǔn) PSR-2:編碼風(fēng)格指南 PSR-3:日志...

    tuomao 評(píng)論0 收藏0
  • PHP PSR規(guī)范

    摘要:前言試問(wèn)現(xiàn)在的碼農(nóng)對(duì)規(guī)范了解多少。寫(xiě)了幾年代碼的我,居然因不了解規(guī)范被鄙視特此來(lái)交下學(xué)費(fèi)網(wǎng)上資料有很多,本文只做鏈接指引什么是是的簡(jiǎn)稱,這個(gè)是組織制定的一套規(guī)范。 前言 試問(wèn)現(xiàn)在php的碼農(nóng)對(duì)psr規(guī)范了解多少。 寫(xiě)了幾年代碼的我,居然因不了解規(guī)范被鄙視!特此來(lái)交下學(xué)費(fèi) 網(wǎng)上資料有很多,本文只做鏈接指引 什么是PSR PSR是PHP Standards Recommendatio...

    weknow619 評(píng)論0 收藏0
  • PHP 標(biāo)準(zhǔn)規(guī)范

    摘要:標(biāo)準(zhǔn)規(guī)范簡(jiǎn)介是的簡(jiǎn)寫(xiě),由組織制定的規(guī)范,是開(kāi)發(fā)的實(shí)踐標(biāo)準(zhǔn)。具體標(biāo)準(zhǔn)有有了統(tǒng)一編碼風(fēng)格規(guī)范,更有利于查看和學(xué)習(xí)各個(gè)框架或類庫(kù),不不需要每次都適應(yīng)新的編碼風(fēng)格。同時(shí)在開(kāi)發(fā)團(tuán)隊(duì)內(nèi)部使用統(tǒng)一的編碼規(guī)范更有利于代碼審查版本控制團(tuán)隊(duì)內(nèi)部交流。 PHP 標(biāo)準(zhǔn)規(guī)范 PSR PSR 簡(jiǎn)介 PSR 是 PHP Standard Recommendations 的簡(jiǎn)寫(xiě),由 PHP FIG 組織制定的 PHP...

    FuisonDesign 評(píng)論0 收藏0
  • 成為一個(gè)PHP專家:缺失的環(huán)節(jié)

    摘要:為了成為一個(gè)專家,他必須先成為中級(jí)者。它非常適合于急于求成或者沒(méi)有太多技術(shù)的人,但掌握絕對(duì)無(wú)法使你成為一個(gè)專業(yè)的開(kāi)發(fā)者它使用意大利面條式的編碼,教你的是不合適的設(shè)計(jì)原則。 這一篇文章是Becoming a PHP Professional系列 4 篇博文中的第 1 篇。 當(dāng)瀏覽各類與PHP相關(guān)的博客時(shí),比如Quora上的問(wèn)題,谷歌群組,簡(jiǎn)訊和雜志,我經(jīng)常注意到技能的等級(jí)分化。問(wèn)題都類...

    cooxer 評(píng)論0 收藏0
  • PSR-1 Basic Coding Standard(譯)-- 基礎(chǔ)編碼規(guī)范

    摘要:注本文算是筆者對(duì)規(guī)范翻譯學(xué)習(xí)筆記,之后會(huì)陸續(xù)翻譯剩余的規(guī)范,可能翻譯的有錯(cuò)誤的地方,希望讀者能夠指正,非常感謝什么是是標(biāo)準(zhǔn)建議的簡(jiǎn)寫(xiě),是由組織框架交互操作組織提出。的工作是尋找項(xiàng)目之間的共性,以及讓開(kāi)發(fā)者能更好協(xié)同工作的方式。 注:本文算是筆者對(duì)PSR規(guī)范翻譯/學(xué)習(xí)筆記,之后會(huì)陸續(xù)翻譯剩余的規(guī)范,可能翻譯的有錯(cuò)誤的地方,希望讀者能夠指正,非常感謝. 什么是PSR? ? ??? PSR是...

    darryrzhong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

K_B_Z

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<