PHP最全编码规约

打印 上一主题 下一主题

主题 629|帖子 629|积分 1887

一、 编码规约

1.1 标签

(1)【强制】PHP 程序可以使用或来界定 PHP 代码,在 HTML 页面中嵌入纯变量时,可以使用这样的形式,不可使用其他的标签变种。
正例:
  1. <?php
  2. /**
  3. * 编码规约
  4. * Created by PhpStorm.
  5. * User: liyh@51cto.com
  6. * Date: 2022/03/01 16:05
  7. * Description:
  8. */
  9. $param1 = 'Hello World!';
  10. ?>
  11. <html>
  12.     <title>测试</title>
  13.     <body>
  14.         <?php echo $param1?>
  15.         <?=$param1?>
  16.     </body>
  17. </html>
复制代码
(2)【强制】纯 PHP 类文件,文件最后一个?>省略。
正例:
  1. <?php
  2. /**
  3. * 纯php文件
  4. * Created by PhpStorm.
  5. * User: liyh@51cto.com
  6. * Date: 2022/03/01 17:15
  7. * Description:
  8. */
  9. class RuleController
  10. {
  11.     public function __construct()
  12.     {
  13.         echo "Hello World!";
  14.     }
  15. }
复制代码
5)【强制】一行不应多于一个语句。
正例:
  1. <?php
  2. /**
  3. * 编码规约【文件描述】
  4. * Created by PhpStorm.
  5. * User: liyh@51cto.com【创建者】
  6. * Date: 2022/03/01 16:05【创建时间】
  7. * Description:
  8. */
复制代码
反例:
  1. /**
  2. * 类概要描述
  3. * 类详细的描述
  4. *
  5. * @author liyh@51cto.com【创建者】
  6. * @date 2022-03-04【创建时间】
  7. *
  8. * @property integer $id 认证ID【属性类型+变量名+描述】
  9. * @property integer $userId 用户ID【属性类型+变量名+描述】
  10. */
  11. class TestController
  12. {}
复制代码
1.5.3 缩进

每个缩进的单位约定是4个空格的缩进,并且不可使用制表符作为缩进,需每个参与项目的开发人员在编辑器(Eclipse、EditPlus、Zend Studio、PhpStorm 等)中进行强制设定将 TAB 转化为 4 个空格,以防在编写代码时遗忘而造成格式上的不规范。
1.5.4 命名空间

1)【强制】namespace声明之后必须存在一个空行。
2)【强制】所有的use声明必须位于namespace声明之后。
3)【强制】每条use声明必须只有一个use关键字。
4)【强制】use语句块之后必须存在一个空行
正例:(涉及1-4点)
  1. /**
  2. * 方法描述
  3. * @author liyh@51cto.com【创建者】
  4. * @date 2022-02-08【创建时间】
  5. * @param array $params 参数1【参数类型+参数名+参数描述,如果是多层结构,需要将基础结构和对应的字段写出来】
  6. * array(
  7. *     "medal_id" => array(),//勋章ID数组
  8. *     "user_id" => array(),//用户ID数组
  9. * )
  10. * @param int $userId 用户ID
  11. * @return array $return 返回结果【需要返回结果的基础结构和对应的字段描述写出来】
  12. * array(
  13. *     "ret" => "0",//错误码,0是成功,其他失败
  14. *     "reason" => "success",//错误描述
  15. *     "data" => array(
  16. *         "user_id" => "用户ID",
  17. *         ....
  18. *     )
  19. * )
  20. */
  21. public static function run($params, $userId)
  22. {
  23.     $return = [
  24.         'ret' => 0,
  25.         'reason' =>'success',
  26.         'data' => []
  27.     ];
  28.     return $return;
  29. }
复制代码
反例:(涉及1-4点)
  1. /**
  2. * 方法描述
  3. * @author liyh@51cto.com【创建者】
  4. * @date 2022-02-08【创建时间】
  5. * @param array $params 参数1【参数类型+参数名+参数描述,如果是多层结构,需要将基础结构和对应的字段写出来】
  6. * array(
  7. *     "medal_id" => array(),//勋章ID数组
  8. *     "user_id" => array(),//用户ID数组
  9. * )
  10. * @param int $userId 用户ID
  11. * @return array $return 返回结果【需要返回结果的基础结构和对应的字段描述写出来】
  12. * array(
  13. *     "ret" => "0",//错误码,0是成功,其他失败
  14. *     "reason" => "success",//错误描述
  15. *     "data" => array(
  16. *         "user_id" => "用户ID",
  17. *         ....
  18. *     )
  19. * )
  20. */
  21. public static function run($params, $userId)
  22. {
  23.     $return = [
  24.         'ret' => 0,
  25.         'reason' =>'success',
  26.         'data' => []
  27.     ];
  28.     return $return;
  29. }
复制代码
1.5.5 控制结构

对于控制结构的样式规则概括如下:
1)【强制】控制结构关键词(if/elseif/else/switch/case/while/for/foreach/try/catch)之后必须有一个空格
2)【强制】左括号之后不可有空格
3)【强制】右括号之前不可有空格
4)【强制】在右括号和左花括号之间必须有一个空格
5)【强制】代码主体必须有一次缩进
6)【强制】右花括号必须主体的下一行
7)【强制】每个结构的主体必须被括在花括号里。这结构看上去更标准化,并且当加新行的时候可以减少引入错误的可能性。
正例:(涉及1-7点)
  1. //这是单行注释
  2. $test = 1;
  3. /*
  4. * 这是多行注释
  5. */
  6. $rule = 2; //这是单行注释
  7. //逻辑有错,修改 by liyh@51cto.com 2022-03-01
  8. $url = 1;
复制代码
1.5.5.1 if,elseif,else
1)【强制】一个if结构看起来应该像下面这样。注意[括号],[空格],[花括号]的位置;并且 else 和 elseif和前一个主体的右花括号在同一行。
2)【强制】关键词 elseif 应该替代 else if 使用以保持所有的控制关键词像一个单词。
正例:
  1. //TODO 待处理逻辑,需要及时处理消除逻辑  by liyh@51cto.com  2022-03-04
复制代码
1.5.5.2 switch, case
1)【强制】一个 switch 结构看起来应该像下面这样。注意[括号],[空格]和[花括号]。case 语句必须从 switch 处缩进,并且 break 关键字(或其他中止关键字)必须和 case 主体缩进在同级。如果一个非空的 case 主体往下落空则必须有一个类似// no break 的注释。
正例:
  1. //FIXME 标记修复错误代码 by liyh@51cto.com 2022-03-04
复制代码
1.5.5.3 while, do while
1)【强制】一个 while 语句看起来应该像下面这样。注意括号,[空格]和[花括号]的位置。
正例:
  1. /*
  2. 临时注释代码后续用于恢复
  3. 如果永久不适用,直接删掉   by liyh@51cto.com 2022-03-04
  4. $a = 1;
  5. $b = 2;
  6. */
  7. $a = 2;
  8. $b = 3;
  9. $c = $a + $b;
复制代码
2)【强制】同样的,一个 do while 语句看起来应该像下面这样。注意[括号],[空格]和[花括号]的位置。
正例:
  1.     $a = 2;
  2.     $b = 3;
  3. //    $c = $a + $b;
  4.     $d = $a - $b;
  5.     echo $d;
复制代码
1.5.5.4 for
1)【强制】一个for 语句看起来应该像下面这样。注意[括号],[空格]和[花括号]的位置。
正例:
  1. const STATUS_ON = 1;//启用
  2. const STATUS_OFF = 0;//禁用
  3. const LEVEL1 = 1;//等级1
  4. const LEVEL2 = 2;//等级2
  5. const LEVEL3 = 3;//等级3
  6. const LEVEL4 = 4;//等级4
  7. const LEVEL5 = 5;//等级5
  8. const LEVEL6 = 6;//等级6
  9. const LEVEL7 = 7;//等级7
复制代码
1.5.5.5 foreach
1)【强制】一个foreach 语句看起来应该像下面这样。注意[括号],[空格]和[花括号]的位置。
正例:
  1. const LEVEL1 = 1;
  2. const LEVEL2 = 2;
  3. const LEVEL3 = 3;
  4. const LEVEL4 = 4;
  5. const LEVEL5 = 5;
  6. const LEVEL6 = 6;
  7. const LEVEL7 = 7;
复制代码
1.5.5.6 try, catch
1)【强制】一个try catch 语句看起来应该像下面这样。注意[括号],[空格]和[花括号]的位置。
正例:
  1. //第一段代码
  2. if ($a = 1) {
  3.     $a = 1;
  4.     $b = 2;
  5.     echo 3;
  6. }
  7. //第二段代码
  8. $d = 1;
  9. $c = 2;
  10. echo $d + $c;
复制代码
1.5.6 运算符

1)【强制】每个运算符与两边参与运算的值或表达式中间要有一个空格;
正例:a=1;a = 1; a=1;c > d;d; d;a == b;b; b;a = b;b; b;c = a+a + a+b;
反例:b=1;b=1; b=1;c>d;d; d;a==b;b; b;a=b;b; b;c=a+a+a+b;
1.5.7 引号

1)【推荐】在绝大多数可以使用单引号的场合,禁止使用双引号(性能考虑)。可以或必须使用单引号的情况包括但不限于下述:
u 字符串为固定值,不包含“\t”等特殊转义字符;
u 数组的固定下标,例如$array['key'];
u 表达式中不需要带入变量,例如string=′test′;,而非string = 'test';,而非string=′test′;,而非string = "test$var";
正例:array\['key'\]; a = 'test'; a="testtrn";a = "test\\t\\r\\n"; a="testtrn";b = "test$b";
反例:array\["key"\]; a = "test"; a=′testtrn′;a = 'test\\t\\r\\n '; a=′testtrn′;a = ' test$b ';
1.5.8 关键词

1)【强制】PHP keywords 必须使用小写。
正例:for public foreach static use extends
反例:FOR PUBLIC FOREACH STATIC USE EXTENDS
2)【强制】PHP 常量 true, false 和 null 必须使用小写。
正例:true false null
反例:TRUE FALSE NULL
1.5.9 函数

和3.5.12类似,只是不需要申明可见性
1.5.10 类

1)【强制】类必须单独一个源文件,并且类名和文件名相同。
2)【强制】类的左花括号必须放到下一行,右花括号必须放在类主体的下一行。
3)【强制】类文件“?>”结束标记去掉
4)【强制】一个类的 extends 和 implements 关键词必须和类名在同一行。
5)【强制】implements 一个列表可以被拆分为多个有一次缩进的后续行。如果这么做,列表的第一项必须要放在下一行,并且每行必须只有一个接口。
正例:(涉及1-7点)
  1. if ($a = 1) {
  2.     $a = 1;
  3.     $b = 2;
  4.     echo 3;
  5. }
复制代码
1.5.11 属性

1)【强制】所有的属性必须声明可见性。
2)【强制】var 关键词不可用来声明属性。
3)【强制】一个语句不可声明多个属性。
4)【推荐】属性名称可以使用单个下划线作为前缀来表明保护或私有的可见性。
正例:(涉及1-4点)
  1. if ($a = 1) {$a = 1; $b = 2; echo 3;}
复制代码
反例:(涉及1-4点)
  1. namespace backend\controllers;
  2. use backend\model\BaseBackendController;
  3. class ClassWorkController extends BaseBackendController
  4. {
  5.    
  6. }
复制代码
1.5.12 方法

1)【强制】所有的方法必须声明可见性。
2)【强制】不超过200行代码,尽可能的拆分、复用。
3)【推荐】方法名不应只使用单个下划线来表明是保护或私有的可见性。
4)【强制】方法名在声明之后不可跟随一个空格。左花括号必须放在下面自成一行,并且右花括号必须放在方法主体的下面自成一行。左括号后面不可有空格,右括号前面不可有空格。
5)【强制】在参数列表中,逗号之前不可有空格,逗号之后必须要有一个空格。
6)【强制】方法中有默认值的参数必须放在参数列表的最后面。
7)【强制】参数列表可以被分为多个有一次缩进的多个后续行。如果这么做,列表的第一项必须放在下一行,并且每行必须只放一个参数。
8)【强制】当参数列表被分为多行,右括号和左花括号必须夹带一个空格放在一起自成一行。
9)【强制】如果存在,abstract 和 final 声明必须放在可见性声明前面。
10)【强制】如果存在,static 声明必须跟着可见性声明。
正例:(涉及1-10点)
  1. namespace backend\controllers;
  2. use backend\model\BaseBackendController;
  3. class ClassWorkController extends BaseBackendController
  4. {
  5.    
  6. }
复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表