PHP研发开发规范2
1 php编码规范
1.1 php开发工具
- 统一使用phpstorm开发
- 代码格式化统一使用prettier
https://prettier.io/
https://github.com/prettier/plugin-php
安装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 示例 # 功能说明 * @file XX.php # 文件名字 * @author xxx<xxx@zuoyebang.com> # 作者 * @version 1.0 # 版本 * @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_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也需要写注释
- 枚举字段主要把每个值含义写到注释里