1. 程式人生 > >PHP之PSR2編碼指南介紹(一)

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
    }
}