1.文件
PHP代码文件必须以 < ? php 或 < ? = 标签开始; PHP代码文件必须以 不带BOM的 UTF-8 编码; PHP代码文件必须使用Unix LF (linefeed)作为行的结束符; PHP代码文件必须以一个空白行作为结束; 纯PHP代码文件必须省略最后的 ?> 结束标签;
2.行
行的长度一定不能有硬性的约束,软性的长度约束一定要限制在120个字符以内; 每行一定不能存在多于一条语句; 合理的使用空行区分不同逻辑的代码;
3.关键字
PHP所有关键字以及true/false/null必须全部小写;
4.缩进
缩进应该能够反映出代码的逻辑,尽量使用四个空格;
5.命名
命名要有描述性,少用缩写; 类名只允许使用字母,使用大驼峰法(CalmaCase); 类的方法使用大驼峰法(CalmaCase); 类的属性使用小驼峰法(calmaCase); 类的属性可以使用m_来区分非公有属性; 变量名使用小驼峰法(calmaCase);
6.注释
6.1.行注释
//
后面需要加一个空格;
如果 //
前面有非空字符,则 //
前面需要加一个空格;
如果若干行都需要注释,保持//
垂直对齐
$foo = array(
'a' => 'How are you?' // 保持
'b' => 'I\'m fine. Thank you. And you?' // 对齐
);
6.2.块注释
类,方法,函数需要加块注释,如果使用标签,如@param
,@return
,请遵守 phpDocument 标签规则。
phpDocument文档:https://phpdoc.org/docs/latest/index.html
<?php
/**
* This is a sample function to illustrate additional PHP
* formatter options.
*
* @param mixed $one The first parameter
* @param int $two The second parameter
* @param string $three The third parameter with a longer
* comment to illustrate wrapping.
* @return void
* @author phper
*/
function Bar($one, $two = 0, $three = "String") {
}
7.类、属性和方法
7.1.namespace 以及 use 声明
namespace
声明后 必须 插入一个空白行。
所有 use
必须 在 namespace
后声明。
每条 use
声明语句 必须 只有一个 use
关键词。
use
声明语句块后 必须 要有一个空白行。
<?php
namespace Vendor\Package; //下面必须空格一行
use FooClass; // use 必须在namespace 后面声明
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass; // 下面必须空格一行
// ... additional PHP code ...
7.2.类
关键词 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
}
7.3.属性
每个属性都必须添加访问修饰符; 一定不可使用关键字 var 声明一个属性; 每条语句一定不可定义超过一个属性;
<?php
class ClassName {
public $foo = null; //必须添加访问修饰符。
//var $bar = 1;一定不可使用关键字 var 声明一个属性。
//public $bar=2,$foo=1;每条语句一定不可定义超过一个属性。
}
7.4.方法
所有方法都必须添加访问修饰符;
需要添加 abstract
或 final
声明时, 必须写在访问修饰符前,而 static
则必须写在其后;
类中的常量所有字母都必须大写,单词间用下划线分隔;
有默认值的参数,必须放到参数列表的末尾。
class ClassName {
public static function Foo() { // static必须写在后面。
//method body
}
final public static function Bar() {// final放前面,static放最后。
//method body
}
}
8.控制语句
8.1.if 、 elseif 和 else
控制结构的开始花括号({)写在声明的同一行,而结束花括号(})必须写在主体后自成一行; 建议使用关键词 elseif 代替所有 else if ,以使得所有的控制关键字都像是单独的一个词; 尽量避免三次以上的嵌套;
<?php
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}
8.2.switch 和 case
标准的 switch 结构如下代码所示,留意括号、空格以及花括号的位置。 case 语句必须相对 switch 进行一次缩进,而 break 语句以及 case 内的其它语句都 必须 相对 case 进行一次缩进。 如果存在非空的 case 直穿语句,主体里必须有类似 // no break 的注释。
<?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;
}
8.3.while 、 do while 、 for 、 foreach
一个规范的 while 语句应该如下所示,注意其 括号、空格以及花括号的位置。
<?php
while ($expr) {
// structure body
}
标准的 do while 语句如下所示,同样的,注意其 括号、空格以及花括号的位置。
<?php
do {
// structure body;
} while ($expr);
for ($i = 0; $i < 10; $i++) {
}
foreach ($iterable as $key => $value) {
}