该指导是做为对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 );