psr2编码样式 博客分类: PHP
代码必须遵循PSR-1
代码必须使用4个空格作为缩进,不能使用TABs
每行长度不是硬性限制的,必须孔子在120个字符,最好应该不超过80个字符
在声明命名空间后必须有一个空行,同时必须在 引用“use”块后有一个空行
引用声明(use)块必须在命名空间声明后
<?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() [--可见性在static前,final和abstract在可见性前] { // method body } }[--类的结束大括号必须新起一行--]
类的大括号开始必须在下一行,关闭大括号必须是在类的最后单独一行
方法的大括号开始必须在下一行,关闭大括号必须是在方法的最后单独一行
必须声明所有方法和属性的可见性(public/protected/private),abstrat(抽象) 和 final(无法被继承的)必须在可见性前声明,static(静态)必须在可见性后声明
流程控制结构关键字后面必须有一个空格;方法和函数调用后面不能有空格
流程控制的开始大括号不行在同一行,关闭结束大括号必须在流程控制体的最后单独一行
流程控制结构后开始括号后以及结束关闭括号前都不能有空格
PHP关键字必须是小写:true,false,null
关键字extends 和 implements 必须和类名在同一行
implements(类似多继承)可以被分割成多行,后面每行都要缩进一次, 一行只能有一个interface
样式1 ok: <?php namespace Vendor\Package; use FooClass; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; class ClassName extends ParentClass implements \ArrayAccess, \Countable { // constants, properties, methods } 样式2 ok: <?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 } 样式3:WRONG <?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:WRONG <?php namespace Vendor\Package; use FooClass; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; class ClassName extends ParentClass implements \Serializable, \ArrayAccess, \Countable { // constants, properties, methods }
关键字 var 不能用于声明一个属性,一行不能声明多个属性,属性名不应以下划线为前缀来表示受保护或私有的可见性。
多个方法参数和后面的逗号之间不能有空格;在每个逗号后面都必须有一个空格;如果参数列表必须分割成多行时,每行都有一个缩进,一旦这样做,第一个参数必须新起一行,每行必须有一个参数 右括号在参数后新起一行,并和方法做大括号在同一行
示例1 ok: <?php namespace Vendor\Package; class ClassName { public function foo($arg1, &$arg2, $arg3 = []) { // method body } } 示例2 ok: <?php namespace Vendor\Package; class ClassName { public function aVeryLongMethodName( ClassTypeHint $arg1, &$arg2, array $arg3 = [] ) { // method body } } 示例3 WRONG: <?php namespace Vendor\Package; class ClassName { public function aVeryLongMethodName( ClassTypeHint $arg1, &$arg2, array $arg3 = [] ) { // method body } } 示例4 WRONG: <?php namespace Vendor\Package; class ClassName { public function aVeryLongMethodName( ClassTypeHint $arg1, &$arg2, array $arg3 = [] ) { // method body } } 示例5 WRONG: <?php namespace Vendor\Package; class ClassName { public function aVeryLongMethodName( ClassTypeHint $arg1, &$arg2, array $arg3 = [] ){ // method body } }
调用一个行数和方法时候在操作符和函数方法名之间不能有空格,同样在第一个参数前,最后一个参数后都不能有空格;如果参数是多行话,同样是从第一个参数开始新起一行,一次缩进,每行一个参数。
几种程序结构标准格式
if elseif else <?php if ($expr1) { // if body } elseif ($expr2) { // elseif body } else { // else body; } switch,case: <?php switch ($expr) { case 0: echo 'First case, with a break'; break; case 1: echo 'Second case, which falls through'; // no break case 2: case 3: case 4: echo 'Third case, return instead of break'; return; default: echo 'Default case'; break; } while: <?php while ($expr) { // structure body } do while: <?php do { // structure body; } while ($expr); for: <?php for ($i = 0; $i < 10; $i++) { // for body } foreach <?php foreach ($iterable as $key => $value) { // foreach body } try, catch <?php try { // try body } catch (FirstExceptionType $e) { // catch body } catch (OtherExceptionType $e) { // catch body }
闭包中每个参数一行,匿名函数中 function后和use前后空格
<?php $foo->bar( $arg1, function ($arg2) use ($var1) { // body }, $arg3 );