該指導是做爲對PSR-1的擴展與拓寬。php
一、概述函數
namespace
聲明以後,必須跟一個空白行。use
塊聲明以後,也必須跟一個空白行。abstract
和 final
必須聲明在可見性以前;static
必須聲明在可見性以後。
下面的示例包含了一些相應的規則。編碼
<?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
代碼必須遵循PSR-1中的描述code
全部的PHP文件都必須使用Unix格式換行符。接口
全部的PHP文件必須以一個空行結束。io
僅包含PHP代碼的文件,末尾關閉標籤 ?>
必須省略掉。table
行不能夠有硬限制。function
行的長度軟限制爲120個字符。class
每行的長度不該該超過80個字符;超出的部分應當分割成多個不超出80字符的跟隨行。
非空的行,行尾不能夠跟空格。
添加空白行可能會加強可讀性而且代表相關代碼塊。
每一行不能夠多於一個聲明。
縮進必須使用4個空格,不能夠使用tab做爲縮進。
PHP關鍵詞必定要小寫。true
, false
和 null
三、命名空間和 Use 聲明
namespace
聲明以後,必須跟隨一個空行。
全部的 use
聲明,必須跟隨在 namespace
聲明以後。
每一個聲明都必須使用一個 use
關鍵詞。
use
塊以後必須跟隨一個空行。
例如:
<?php namespace Vendor\Package; use FooClass; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; // ... 其他代碼 ...
四、類、屬性和方法
「類」指類、接口、trailts。
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 }
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 }
全部的屬性都必須聲明可見性。
關鍵詞 var
不能夠用於屬性聲明。
每一個表達式不能多於一個屬性聲明。
不該該如下劃線開頭的方式,做爲暗示該方法爲私有或受保護的屬性。
<?php namespace Vendor\Package; class ClassName { public $foo = null; }
全部的方法都必須聲明可見性。
不該該如下劃線開頭的方式,做爲暗示該方法爲私有或受保護的方法。
方法名的聲明以後不能夠有空格,括號與參數之間也不能夠有空格。
<?php namespace Vendor\Package; class ClassName { public function fooBarBaz($arg1, &$arg2, $arg3 = []) { // 方法體 } }
參數列表中,每一個逗號以前不能夠有空格,以後必須有一個空格。
含有默認值的參數,必須放在參數列表最後。
<?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 } }
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 } }
當調用方法或函數時,名稱與圓括號之間不能夠有空格。
圓括號以後也不能夠有空格。
參數調用,逗號以前不能夠有空格,以後必須有一個空格。
<?php bar(); $foo->bar($arg1); Foo::bar($arg2, $arg3);
參數列表也許會被拆分爲多行,每一個跟隨行必須縮進一次。
第一項必須在下一行中,每行必須只有一個參數。
<?php $foo->bar( $longArgument, $longerArgument, $muchLongerArgument );