PHP 代码风格指南, 遵守 PSR-2 标准编写的代码会显得非常优雅. 别人在阅读你的代码的时候会赏心悦目.
1: 规则总览
- 代码规则遵守
PSR-1.- 代码缩进使用
4个空格. 不是使用tab缩进.- 一行代码不要超过
80个字符, 超过的需要设置换行.namespace声明语句后需要保留一个空行. 使用use声明代码块后后面也需要留一个空行.- 定义
class后的 花括号{和结束class声明的}都单独使用一行. 不要把{和类名同一行.- 定义
method的时候, 开始和结束的花括号{}也都独占一行. 和规则5一样.abstract,final关键字需要放在可见性声明前面,static关键字放在可见性声明后面.- 控制结构中关键字后需要留一个空格, 函数调用是不能留空格.
- 控制结构代码块的开始的花括号
{需要和控制块开始在同一行. 结束的花括号}需要在单独一行.- 左括号(控制开始)后面不要留空格, 右括号(控制结束)前不要留空格.
2: 规则详解
2.1: 关于PHP文件
- PHP代码行结尾使用 Unix 结尾符,
\n, Windows 系统使用\r\n作为行结尾. - 每个PHP文件后都需要留一行空行.
- 纯PHP文件后不需要使用
?>声明结束.
2.2: 关于每行代码
- 每行代码不要超过80个字符, 超过了采取多行的编写方式.
- 如果当行代码已经完成功能. 行后面不要留空格.
- 可以适当的使用空行保持代码的阅读性.
- 一行代码不要完成多个功能. 每行代码干一个步骤.
2.3: 关于PHP的关键字
- PHP的关键字,
true,false,null使用小写.
2.4: 关于 Namespace 和 Use 声明.
-
namespace声明后要留一空行. -
use声明要放在namespace声明后. -
use声明每行都要以use开始. -
use声明块结束后要留一空行. - 简单的代码示例:
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
// ... additional PHP code ...
2.5: 关于类 Classes
- 代码风格适用于
classes,interfaces,traits. - 关键字
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比较多. 可以使用多行声明. 每个被 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
}
2.6: 关于类属性: Properties
- 所有的类属性都需要带上
可见性声明(public,protected,private) 等. - 类属性名不能使用
var. - 每行不要定义多个类属性.
- 不要用什么
_给属性名做前缀来区分是私有属性或者其他用途.
<?php
namespace Vendor\Package;
class ClassName
{
public $foo = null;
}
2.7: 类方法: Methods
- 所有方法都需要带
可见性声明 - 方法名前面不要用统一的前缀来区分私有或者受保护的方法.
- 方法名后不要留空格, 要直接跟对括号, 方法的花括号都需要在
独立的行. 左对括号后不能留空格, 右对括号前不要留空格. - 方法中的参数: 参数后的逗号
,前不要留空格, 逗号,后面留一个空格. 带默认值的参数放到最后.
<?php
namespace Vendor\Package;
class ClassName
{
public function fooBarBaz($arg1, &$arg2, $arg3 = [])
{
// method body
}
}
- 多参数的时候需要把参数分成多行声明, 每行只放一个参数, 并且进行缩进. 括号要另起一行.
<?php
namespace Vendor\Package;
class ClassName
{
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3 = []
) {
// method body
}
}
2.8: 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
}
}
//to be continue.