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.
网友评论