PHP規範PSR2(編碼指南)介紹(一)
本指南擴充套件和擴充套件了基本編碼標準PSR-1。
本指南的目的是在掃描來自不同作者的程式碼時減少認知摩擦。它通過列舉一組共享規則和對如何格式化PHP程式碼的期望來實現。
這裡的風格規則源於各個成員專案之間的共性。當各個作者跨多個專案進行協作時,在所有這些專案中使用一套指南會很有幫助。因此,本指南的好處不在於規則本身,而在於共享這些規則。
本文件中的關鍵詞“必須”,“必須”,“必需”,“應該”,“不應該”,“應該”,“不應該”,“推薦”,“可以”和“可選”按照RFC 2119中的描述進行解釋。
1、預覽
- 程式碼必須遵循“編碼風格指南”PSR [PSR-1]。
- 程式碼必須使用4個空格進行縮排,而不是製表符。
- 線路長度不得有硬性限制;軟限制必須是120個字元;線條不應該是80個字元或更少。
- 在名稱空間宣告之後必須有一個空行,並且在使用宣告塊之後必須有一個空行。
- 開啟類的大括號必須在下一行,並且關閉大括號必須在主體後面的下一行。
- 開啟方法的括號必須在下一行,並且關閉括號必須在主體後面的下一行。
- 必須在所有屬性和方法上宣告可見性;必須在可見性之前宣告抽象和最終;必須在可見性之後宣告static。
- 控制結構關鍵字必須在它們之後有一個空格;方法和函式呼叫絕不可以。
- 控制結構的開口括號必須在同一條線上,並且關閉括號必須在主體後面的下一行。
- 控制結構的開括號必須在它們後面沒有空格,並且控制結構的右括號之前不能有空格。
1.1 例子
此示例包含以下一些規則作為快速概述:
<?php namespace Vendor\Package; use FooInterface; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; class Foo extends Bar implements FooInterface { public function sampleMethod($a, $b = null) { if ($a === $b) { bar(); } elseif ($a > $b) { $foo->bar($arg1); } else { BazClass::bar($arg2, $arg3); } } final public static function bar() { // method body } }
2、通用
2.1 基本編碼標準
程式碼必須遵循PSR-1中列出的所有規則。
2.2 文件
所有PHP檔案必須使用Unix LF(換行)行結尾。
所有PHP檔案必須以一個空行結束。
必須從僅包含PHP的檔案中省略關閉?>標記。
2.3 行
線路長度不得有硬性限制。
線路長度的軟限制必須是120個字元;自動樣式檢查器必須發出警告,但絕不能在軟限制上出錯。
行不應超過80個字元;超過的行應該被分成多個後續行,每行不超過80個字元。
在非空白行的末尾不得有尾隨空格。
可以新增空行以提高可讀性並指示相關的程式碼塊。
每行不得超過一個語句。
2.4 縮排
程式碼必須使用4個空格的縮排,並且不得使用製表符進行縮排。
N.b。:僅使用空格,而不是將空格與製表符混合,有助於避免差異,補丁,歷史記錄和註釋的問題。空間的使用還使得易於插入細粒度的子壓痕用於線間對齊。
2.5。關鍵字和真/假/空
PHP關鍵字必須是小寫的。
PHP常量true,false和null必須是小寫的。
3.名稱空間和使用宣告
如果存在,則在名稱空間聲明後必須有一個空行。
如果存在,所有使用宣告必須在名稱空間宣告之後。
每個宣告必須有一個use關鍵字。
使用塊後必須有一個空行。
例如:
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
// ... additional PHP code ...
4、類,屬性和方法
4.1 擴充套件和實施
extends和implements關鍵字必須在類名稱的同一行宣告。
班級的開口支架必須自成一線;班級的結束括號必須在身體後面的下一行。
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
// constants, properties, methods
}
實現列表可以分為多行,每行後續行縮排一次。這樣做時,列表中的第一項必須在下一行,並且每行必須只有一個介面。
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements
\ArrayAccess,
\Countable,
\Serializable
{
// constants, properties, methods
}
4.2 屬性
必須在所有屬性上宣告可見性。
var關鍵字絕不能用於宣告屬性。
每個語句不得超過一個屬性。
屬性名稱不應以單個下劃線為字首,以表示受保護或私有可見性。
屬性宣告如下所示。
<?php
namespace Vendor\Package;
class ClassName
{
public $foo = null;
}
4.3 方法
必須在所有方法上宣告可見性。
方法名稱不應以單個下劃線為字首,以指示受保護或私有可見性。
方法名稱不得在方法名稱後面用空格宣告。開口支撐必須單獨行,並且閉合支撐必須在身體後面的下一行。在左括號後面不能有空格,並且在右括號之前不能有空格。
方法宣告如下所示。請注意括號,逗號,空格和大括號的位置:
<?php
namespace Vendor\Package;
class ClassName
{
public function fooBarBaz($arg1, &$arg2, $arg3 = [])
{
// method body
}
}