php团队开发规范约定

一、基本约定

1.编码规范

  • 代码必须遵循 PSR-1 编码规范。
  • 代码必须遵循 PSR-2 编码风格规范。
  • 代码必须遵循 PSR-12 编码规范扩充。
  • 扩充:变量名统一使用小写字母,并且单词之间通过下划线分开

辅助开发人员遵循PSR规范解决方案

2、代码注释规范

  • 代码注释标签:
    @access 该标记用于指明关键字的存取权限:private、public或proteced 使用范围:class,function,var,define,module
    @author 指明作者
    @deprecated 指明不用或者废弃的关键字 使用范围:class,function,var,define,module,constent,global,include
    @const 使用范围:define 用来指明php中define的常量
    @final 使用范围:class,function,var 指明关键字是一个最终的类、方法、属性,禁止派生、修改。
    @global 指明在此函数中引用的全局变量
    @abstrcut 说明当前类是一个抽象类
    @param 指明一个函数的参数
    @return 指明一个方法或函数的返回值
    @static 指明关建字是静态的。
    @var 指明变量类型
    @version 指明版本信息
    @todo 指明应该改进或没有实现的地方
    @throws 指明此函数可能抛出的错误异常,极其发生的情况
    常用标签有 @param、@return、@author、@todo、@throws 不要另外去创造新的标签。
    更多标签可查看PHP Document Tag

  • 注释模板示例:

    • 文件头部注释(可选,单一类文件只写类注释即可)
      ````
      /**

      • 这是一个什么文件
      • 此文件程序用来做什么的(详细说明,可选。)。
      • @author hcg
        */
        ````
    • 类注释
      /** 
      * 类的介绍 
      * 
      * 类的详细介绍(可选。)。 
      * @author       hcg
      */ 
      class Test   
      {  
      
      }
      
    • 方法头部注释
      /** 
      * 方法的含义说明 
      * 
      * @access public 
      * @param int    $param1 参数一的说明 
      * @param array  $param2 参数二的说明 
      * @param mixed  $mixed 这是一个混合类型 
      * @return array 
      * 
      * @author       hcg
      */ 
      public function thisIsFunction($param1, $param2, $mixed) 
      {
          return array();
      }
      
  • 参数名、属性名、标签的文本 上下要对齐;
  • 注释的原则是将逻辑解释清楚,并不是越多越好,因为注释也是有维护成本的,代码逻辑迭代修改时注释也需要同步修改;
  • 若干语句作为一个逻辑代码块时,可以使用块段落注释/* :START// :END*/方式把代码段包裹起来;
  • 具体到某一个语句的注释,可以使用行注释://,// 后面需要加一个空格;
  • 除了PHP语法外的逻辑业务也需要添加实现步骤的注释;
    public function actionInfo (aid)
    {
    /* 获取接口缓存数据,当缓存数据为空时,获取真实数据并添加接口缓存数据。:START*/ //获取接口缓存数据
    result = this->cache();
    if(!
    result){
    service = ActiveService::getInstance();
    //获取真实数据
    result = service->GetInfo(aid);
    //添加接口缓存数据
    this->addCache(result);
    }
    /* 获取接口缓存数据,当缓存数据为空时,获取真实数据并添加接口缓存数据。:END*/
    }

3、业务模块

(1)、涉及到多个数据表 更新/添加 操作时,最外层要用事务,保证数据库操作的原子性;
(2)、Model层,只做简单的数据表的查询;
(3)、业务逻辑统一封装到 Logic/Service层;
(4)、控制器只做URL路由,不要当作 业务方法 调用;
(5)、控制器层不能出现SQL操作语句,如 ThinkPHP框架的 where()、order() 等模型方法,
即,控制器中,不要出现类似这样的SQL语句:D('XXX')->where()->order()->limit()->find();
where()、order()、limit() 等SQL方法只能出现在 Model层、业务层!

4、MYSQL规范

  • 一、MySQL数据库命名规范
    (1)、数据库所有表前缀均使用项目名称首字母缩写;
    (2)、数据库所有对象名称均使用小写字母,并且单词之间通过下划线分开;
    (3)、数据库所有存储相同数据的列名和列类型必须保持一致。

  • 二、MySQL数据库基本设计规范
    (1)、若无特殊说明,建表时一律采用Innodb存储引擎;
    (2)、选择合适的引擎可以提高数据库性能,如InnoDB和MyISAM,InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,
    这两个表类型各有优劣,视具体应用而定;基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持;
    MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能;
    因此,其支持事务处理、支持外键、支持崩溃修复能力和并发控制是我们建表时首选的存储引擎。
    (3)、数据库和表的字符集统一使用utf8;
    (4)、数据库和表的字符集统一使用utf8,若是有字段需要存储emoji表情之类的,则将表或字段设置成utf8mb4;
    因为,utf8号称万国码,其无需转码、无乱码风险且节省空间,而utf8mb4又向下兼容utf8。
    (5)、设计数据库时所有表和字段必须添加注释;
    (6)、单个表的数据量大小控制在500万以内;
    (7)、尽量满足冷热数据分离,减小表等宽度;
    (8)、数据库中禁止存储图片、文件等大的二进制数据。
    (9)、尽可能把所有列定义为NOT NULL,索引NULL列需要额外的空间来保存,所以要占用更多的空间,
    进行比较和计算时要对NULL值做特别的处理

  • 三、MySQL数据库字段设计规范
    (1)、优先选择符合存储需要的最小的数据类型;
    (2)、避免使用TEXT、BLOB数据类型;
    (3)、避免使用ENUM枚举类型;
    (4)、尽量使用INT类型存储时间戳,避免使用TIMESTAMP(4字节)或DATETIME(8字节)类型存储时间,
    INT类型存时间戳,占用资源少,查询速度快,条件范围搜索使用between没什么问题,查询条件自由拼接。
    DATETIME和TIMESTAMP相对于INT来说也有一个小小的好处,就是对于时间类型来说,可以有一系列的时间函数可以用;
    (5)、财务相关的金额类数据必须使用(精准浮点)decimal 类型,Decimal类型为精准浮点数,在计算时不会丢失精度。

  • 四、MySQL索引设计规范
    (1)、每张表的索引数量不超过5个;

    • 索引并不是越多越好!索引可以提高效率同样可以降低效率。
    • 索引过多会增加mysql优化器生成执行计划的时间,同样会降低查询性能。
      (2)、对于联合索引来说,要遵守最左前缀法则
    • 字段长度小、区分度最高及使用最频繁的列放在联合索引的最左侧
      (3)、避免建立冗余索引和重复索引
    • 重复索引示例:primary key(id)、index(id)、unique index(id)
    • 冗余索引示例:index(a,b,c)、index(a,b)、index(a)
      (4)、每个Innodb 表必须有一个主键;
      (5)、尽量避免使用外键约束,但一定要在表与表之间的关联键上建立索引,外键会影响父表和子表的写操作从而降低性能。
      (6)、常见索引列建议
    • 出现在SELECT、UPDATE、DELETE语句的WHERE从句中的列
    • 包含在ORDER BY、GROUP BY、DISTINCT中的字段
    • 并不要将符合1和2中的字段的列都建立一个索引, 通常将1、2中的字段建立联合索引效果更好
    • 多表join的关联列

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

微信扫一扫,分享到朋友圈

php团队开发规范约定
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close