PSR-2:編碼風格指導

該指導是做爲對PSR-1的擴展與拓寬。php

 

一、概述函數

  • 代碼必須遵循「編碼風格指導」PSR [PSR-1]。
  • 代碼必須使用4個空格做爲縮進,而不是使用tab縮進。
  • 不能硬性限制行的長度,軟限制必須是120字符,行應當很少於80個字符。
  • namespace 聲明以後,必須跟一個空白行。use 塊聲明以後,也必須跟一個空白行。
  • 類後的開花括號必須寫在下一行,閉花括號也必須寫在類體的下一行。
  • 類方法的開花括號、閉花括號必須寫在下一行。
  • 所有屬性和方法都必須聲明可見性;abstractfinal 必須聲明在可見性以前;static 必須聲明在可見性以後。
  • 控制結構關鍵詞以後必須跟隨一個空格,方法和函數調用以後不能夠跟隨空格。
  • 控制結構的開花括號必須在統一行內,閉花括號寫在主體的下一行。
  • 控制結構的開圓括號以後,閉花括號以前必定不能夠跟隨空格。

 

  • 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()
    {
        // 方法體
    }
}

二、經常使用spa

  • 2.一、基礎編碼標準

        代碼必須遵循PSR-1中的描述code

  • 2.二、文件

        全部的PHP文件都必須使用Unix格式換行符。接口

        全部的PHP文件必須以一個空行結束。io

        僅包含PHP代碼的文件,末尾關閉標籤 ?> 必須省略掉。table

  • 2.三、行

        行不能夠有硬限制。function

        行的長度軟限制爲120個字符。class

        每行的長度不該該超過80個字符;超出的部分應當分割成多個不超出80字符的跟隨行。

        非空的行,行尾不能夠跟空格。

        添加空白行可能會加強可讀性而且代表相關代碼塊。

        每一行不能夠多於一個聲明。

  • 2.四、縮進

        縮進必須使用4個空格,不能夠使用tab做爲縮進。

  • 2.五、關鍵詞和 True/False/Null

        PHP關鍵詞必定要小寫。true , falsenull

三、命名空間和 Use 聲明

        namespace 聲明以後,必須跟隨一個空行。

        全部的 use 聲明,必須跟隨在 namespace 聲明以後。

        每一個聲明都必須使用一個 use 關鍵詞。

        use 塊以後必須跟隨一個空行。

        例如:

<?php
namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

// ... 其他代碼 ...

四、類、屬性和方法

        「類」指類、接口、trailts。

  • 4.一、擴展和接口

        extendsimplements 關鍵詞必須和類名聲明在同一行。

        類的開花括號必須跟隨在它本身的行,閉花括號必須跟隨在下一行。

<?php
namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}

        implements 的列表,可能會分割爲跨越多行,每個跟隨行縮進一次。若是這麼作的話,列表中的第一個項必須在下一行,且每行只容許有一個接口。

<?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.二、屬性

        全部的屬性都必須聲明可見性。

        關鍵詞 var 不能夠用於屬性聲明。

        每一個表達式不能多於一個屬性聲明。

        不該該如下劃線開頭的方式,做爲暗示該方法爲私有或受保護的屬性。

<?php
namespace Vendor\Package;

class ClassName
{
    public $foo = null;
}
  • 4.三、方法

        全部的方法都必須聲明可見性。

        不該該如下劃線開頭的方式,做爲暗示該方法爲私有或受保護的方法。

        方法名的聲明以後不能夠有空格,括號與參數之間也不能夠有空格。

<?php
namespace Vendor\Package;

class ClassName
{
    public function fooBarBaz($arg1, &$arg2, $arg3 = [])
    {
        // 方法體
    }
}
  • 4.四、方法參數

        參數列表中,每一個逗號以前不能夠有空格,以後必須有一個空格。

        含有默認值的參數,必須放在參數列表最後。

<?php
namespace Vendor\Package;

class ClassName
{
    public function foo($arg1, &$arg2, $arg3 = [])
    {
        // 函數體
    }
}

        參數列表也許會被拆分爲多行,每個跟隨行必須縮進一次。第一項必須放在下一行,且每行只容許一個參數。

        閉圓括號必需要和開花括號放在一塊兒,且中間用一個空格分開。

<?php
namespace Vendor\Package;

class ClassName
{
    public function aVeryLongMethodName(
        ClassTypeHint $arg1,
        &$arg2,
        array $arg3 = []
    ) {
        // method body
    }
}
  • 4.五、abstract , final , 和 static

        abstract 和 final 必須在可見性聲明以前。

        static 必須在可見性聲明以後。

<?php
namespace Vendor\Package;

abstract class ClassName
{
    protected static $foo;

    abstract protected function zim();

    final public static function bar()
    {
        // method body
    }
}
  • 4.六、方法和函數調用

        當調用方法或函數時,名稱與圓括號之間不能夠有空格。

        圓括號以後也不能夠有空格。

        參數調用,逗號以前不能夠有空格,以後必須有一個空格。

<?php
bar();
$foo->bar($arg1);
Foo::bar($arg2, $arg3);

        參數列表也許會被拆分爲多行,每一個跟隨行必須縮進一次。

        第一項必須在下一行中,每行必須只有一個參數。

<?php
$foo->bar(
    $longArgument,
    $longerArgument,
    $muchLongerArgument
);
相關文章
相關標籤/搜索