PHP 开发规范整理
代码样式规范
编码基本规范
a、代码必须遵守 PSR-1。
b、文件编码Unicode (UTF-8) 编码保存。同时不要使用 字节序标记(BOM)
c、代码必须使用4个空格的缩进,而不是制表符。
d、一行代码长度不应硬性限制;软限制必须为120个字符;也应当是80个字符或者更少。
2、申明相关规范
2.1 命名空间申明和使用
a、 ##在namespace声明下面必须有一个空行,并且use声明代码块下面也必须有一个空行
namespace frontendcontrollers;
.....空格
use Yii;
.....空格
2.2 类的申明
a、类的左花括号必须放到下一行,右花括号必须放在类主体的下一行。
b、方法的左花括号必须放在下一行,右花括号必须放在方法主体下面。
c、术语“类”指所有的类,接口( interface ) 抽象类( abstract ) 和 特性( traits )
class DbMysql
{
.....代码
}
interface DbMysql
{
.....代码
}
<p>abstract DbMysql
{
.....代码
}</p>
<p>traits DbMysql
{
.....代码
}
2.3 类的扩展和继承
a、一个类的extends和implements关键词必须和类名在同一行。
b、类的左花括号必须放在下面自成一行;右花括号必须放在类主体的后面自成一行。
class ClassName extends ParentClass implements ArrayAccess, Countable
{
.....代码
}
c、implements一个列表可以被拆分为多个有一次缩进的后续行。如果这么做,列表的第一项必须要放在下一行,并且每行必须只有一个接口。
class ClassName extends ParentClass implements
ArrayAccess,
Countable,
Serializable
{
.....代码
}
2.4 方法申明
a、所有的属性和方法必须有可见性(译者注:Public, Protect, Private)声明
b、在参数列表中,逗号之前不可有空格,逗号之后必须要有一个空格。
c、方法中有默认值的参数必须放在参数列表的最后面。
class DbMysql
{
public function getUser($arg1, &$arg2, $arg3 = [])
{
.....代码
}
}
b、abstract和final声明必须在可见性之前;
class DbMysql
{
final public function getUser()
{
.....代码
}
}
c、static声明必须在可见性之后
静态 static 方法应该声明其作用域,且不应该再被声明为 private 私有,而应该为 protected 或者public
如果只是不想被子类继承,则应该用 final 声明它们
class DbMysql
{
public static function getUser()
{
.....代码
}
}
3、命名规范
3.1 普通变量
a. 所有字母都使用小写;
b. 对于一个变量使用多个单词的,使用’_'作为每个词的间隔
例如:$base_dir、$red_rose_price等
3.2 局部变量
a. 所有字母使用小写;
b. 变量使用’'开头;
c. 多个单词组成的局部变量名使用’'作为每个词间的间隔
例子:$_base_dir、$_red_rose_price等。
3.3 全局变量
全局变量应该带前缀’g',知道一个变量的作用域是非常重要的
例如
global $g_log_level;
global $g_log_path;
3.4 全局常量
a. 所有字母使用大写
b. 全局变量多个单词间使用’_'作为间隔
例子:$BASE_DIR、$RED_ROSE_PRICE等
3.5 函数
a. 所有字母都使用小写
b. 对于一个变量使用多个单词的,使用’_'作为每个词的间隔
c. 函数的命名建议使用动词+名词的方式,如get_user_img。
完成一组功能的函数放到一个文件中,存放函数的文件采用function_name.func.php命名
3.6 类
a. 以大写字母开头;
b. 多个单词组成的变量名,单词之间不用间隔,各个单词首字母大写。
例子:class MyClass 或class DbOracle等。
3.7 方法
a. 首字母小写;
b. 多个单词间不使用间隔,除第一个单词外,其他单词首字母大写
例子:function myFunction ()或function myDbOracle ()等
4、控制结构申明
4.1. if,elseif,else
a、一个if结构看起来应该像下面这样。注意括号,空格,花括号的位置;
b、并且else和elseif和前一个主体的右花括号在同一行。
<?php
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}
关键词elseif应该替代else if使用以保持所有的控制关键词像一个单词。
4.2. switch,case
a、一个switch结构看起来应该像下面这样。注意括号,空格和花括号。
b、case语句必须从switch处缩进,并且break关键字(或其他中止关键字)必须和case主体缩进在同级。
c、如果一个非空的case主体往下落空则必须有一个类似// no break的注释。
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;
}
4.3. while,do while
a、一个while语句看起来应该像下面这样。注意括号,空格和花括号的位置。
while ($expr) {
// structure body
}</p>
<p>b、同样的,一个do while语句看起来应该像下面这样。注意括号,空格和花括号的位置。
do {
// structure body;
} while ($expr);
4.4. for
a、一个for语句看起来应该像下面这样。注意括号,空格和花括号的位置。
for ($i = 0; $i < 10; $i++) {
// for body
}
4.5. foreach
a、一个foreach语句看起来应该像下面这样。注意括号,空格和花括号的位置。
foreach ($iterable as $key => $value) {
// foreach body
}
4.6. try, catch
a、一个try catch语句看起来应该像下面这样。注意括号,空格和花括号的位置。
try {
// try body
} catch (FirstExceptionType $e) {
// catch body
} catch (OtherExceptionType $e) {
// catch body
}
5、编码习惯
5.1、变量使用
a.所有的变量均需要先申明后使用
b.对于数组或对象,在使用一个不确定的key时,首先进行isset()的判断,然后再使用
例子:$var = ''; isset($val) ? $val : '';
5.2、变量的输入输出
a.不推荐直接使用$_GET、$_POST或者$_REQUEST获取值
b.所有的输入输出都必须使用框架封装的方法来实现
5.3、字符串相关
a.字符串尽量使用单引号
b.如果字符串中需要使用变量,例如:$val = "tips:{$title}";
6. 闭包( 参考 )
闭包在声明时function关键词之后必须有一个空格,并且use之前也需要一个空格。
左花括号必须在同一行,右花括号必须在主体的下一行。
参数列表和变量列表的左括号之后不可有空格,其右括号之前也不可有空格。
在参数列表和变量列表中,逗号之前不可有空格,逗号之后必须有空格。
闭包带默认值的参数必须放在参数列表后面。
一个闭包声明看起来应该像下面这样。注意括号,空格和花括号的位置。
$closureWithArgs = function ($arg1, $arg2) {
// body
};
$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
// body
};
参数和变量列表可以被分成多个带一次缩进的后续行。如果这么做,列表的第一项必须放在下一行,并且一行必须只放一个参数或变量。
当最终列表(不管是参数还是变量)被分成多行,右括号和左花括号必须夹带一个空格放在一起自成一行。
下面是一个参数和变量列表被分割成多行的示例。
$longArgs_noVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) {
// body
};
$noArgs_longVars = function () use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
$longArgs_longVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
$longArgs_shortVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use ($var1) {
// body
};
$shortArgs_longVars = function ($arg) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
注意如果在函数或者方法中把闭包作为一个参数调用,如上格式规则同样适用。
$foo->bar(
$arg1,
function ($arg2) use ($var1) {
// body
},
$arg3
);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。