PHP研发开发规范2

1 php编码规范

1.1 php开发工具

安装prettier方法如下

安装prettier 展开源码
说明:
1.phpstorm每次新建的项目,File Watchers默认没勾选上,需要自己在勾选下

2. prettier的watcher配置如下

3. 每个项目git仓库会增加一个配置文件.prettierrc,严禁修改

 

1.2 使用fis3上传代码

docker和开发机都可以使用fis3上传代码,操作步骤如下:

1) 在自己电脑上按照好fis3工具

2)将fis3执行脚本放在php项目根目录下,注意在.gitignore添加此文件,不要把此脚本提交到git仓库里,脚本请到这里下载:

3)修改脚本的App和RemoteServer两个参数,app是项目名字,RemoteServer中修改想要上传的目标服务器域名

4)在项目根目录下执行命令(fis3 release -Lw),每次执行会先全量上传整个项目,然后脚本会一直监控,每当有文件修改会自动上传

 

1.3 编码规范参照代码规范执行

 

 

1.4 代码注释

文件、类和函数必须写注释

一定不要因为代码或者文件复制过来的而不去修改注释

phpstorm设置注释模板,进入设置:Editor-》File and Code Tempates-》PHP File Header

phpstorm添加函数注释快捷方式,在函数上方输入/**,然后回车就会自动生成函数注释

文件注释示例

/**
 * @befie 示例                             # 功能说明
 * @author xxx<xxx@zuoyebang.com>         # 作者
 * @since   1.1 2020-06-10 第二版 @xingfu  # 更新说明
 * @date 2019-05-19                       # 创建时间
 */

函数注释示例

/**
 * 函数功能
 * @param 参数1
 * @param 参数2
 * @return 返回值
 * @throws Exception
 */

2 odp开发规范

2.1 action基类

parent-phplib库统一封装了各种场景的action基类,各个服务里不要在自己封装action基类

action基类
说明
使用范围
Parentlib_Action_BaseAction

此基类用于app端返回json数据接口,需要校验conf文件

端上接口
Parentlib_Action_BaseAjaxAction

此基类用于前端返回json数据接口,需要校验conf文件

fe接口
Parentlib_Action_BaseMagicAction

此基类用于app端或者前端返回json数据接口,需要校验conf文件

通用接口,有安全问题,不建议使用
Parentlib_Action_BaseWebAction

此基类用于前端不返回json数据接口,不需要校验conf文件,tpl接口使用

tpl接口,禁用
Parentlib_Action_BaseFeAction

此基类用于前端返回json数据接口,不需要校验conf文件

fe接口,禁用
Parentlib_Action_BaseInternalAction

此基类用于内网服务接口action基类

内网接口
Parentlib_Action_BaseWxxcxAction 此基类用于微信小程序接口,会进行接口参数签名 小程序接口

2.2 dao基类

parent-phplib库统一封装了dao基类,各个服务里请直接使用lib库的基类

说明:hk库共有3个dao基类,除了下面这2个,还有个Hk_Common_Dao,之前封装了一个基于此类的Parentlib_Dao_Base

dao基类
说明
方法
Parentlib_Common_BaseDao

此基类用于单表dao,继承至Hk_Common_BaseDao

获取查询字段数组:getQueryFields

查询带分页的列表数据:getPageList

查询列表数据,并返回是否还有下一页:getMoreList

Parentlib_Common_BaseMultiDao

此基类用于分表dao,继承至Hk_Common_BaseMultiDao

获取查询字段数组:getQueryFields

按环境获取分表数量:getMaxTableNum

查询所有表数据:queryAllTable

查询带分页的列表数据:getPageList

查询列表数据,并返回是否还有下一页:getMoreList

 

2.3 脚本

  • 脚本文件严禁直接创建在/script根目录下
  • 按照模块创建目录
  • 模块目录内的脚本类型分为守护进程deamon、定时任务cron和一次性任务once,分表创建目录,见下图

2)脚本编码

  • 脚本文件名字必须以大写字母开头
  • 脚本统一继承脚本基类Parentlib_Common_BaseScript
  • 脚本必须写完整注释,定时任务需要在注释里写清楚crontab计划
  • 脚本内打info日志直接使用Bd_Log::addNotice,基类会统一打一条日志
  • 脚本里注释填写好jira工单地址
  • 脚本一定要写到自己相关的项目里

2.4 日志

代码里打日志的地方一定要想清楚该往info还是wf里写

wf日志:不要什么错误都往wf里打,Bd_Log::warning()和Bd_Log::fatal()每次请求都会打一条日志,一次接口请求里代码多次调用会打多条wf日志,影响接口错误里的统计

info日志:一次接口请求框架会最后打一条info日志,不要在代码中使用Bd_Log::notice(),应该使用Bd_Log::AddNotice()

 

2.5 parent-phplib库公共方法

parent-phplib库封装了公共的ds,service和util,开发时统一使用公共库的方法,不要重复造轮子

使用手册见wiki:parent-phplib库使用手册

 

2.6 rpc调用

每个项目调用一个第三方服务时,在library/XX/rpc/目录下封装一个类来统一封装这个第三方服务的所有接口,不要在其他地方分散去单独写,方便维护和管理

 

2.7 接口规范

入参和出参字段必须使用驼峰

 

2.7 其他

  • 不要直接复制目录或者文件到其他项目,按需获取,无效的代码要删除
  • 测试接口不要对外发布,如果有测试需要一定要继承内网的action

 

3 mysql

3.1 表设计

  • 表名称以tbl开头,驼峰格式命名,
  • 字段名字使用下划线的格式,不要用驼峰
  • 非text字段一定要设置NOT NULL
  • 注意id字段的长度,比如公司的用户uid一定要用bigint
  • 记录id不要用自增id,要用发号器生成的id

3.2 表注释

  • 一定要写表名称和字段的注释,自增id也需要写注释
  • 枚举字段主要把每个值含义写到注释里
posted on 2021-01-19 21:55  Code2020  阅读(273)  评论(0编辑  收藏  举报