ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 一、规范前言篇 标准化不是特殊的个人风格,它让程序员可以了解任何代码,弄清程序的状况;新人可以很快的适应环境;防止新接触php的人一次次的犯同样的错误;在一致的开发环境下,可以减少人们犯错的机会。 ## 二、命名定义篇 **函数变量命名** 使用英文名词、动词,以下划线作为单词的分隔,其他的字母均使用小写,单词的首个字母使用小写,例: ~~~ $repeat_count = ''; $del_user_sql = ''; ~~~ **类属性命名** 使用英文名词、动词,以大写字母作为单词的分隔,其他的字母均使用小写,单词的首个字母使用小写,不使用下划线,不可缺省属性描述符例如:`public、protect、private` ~~~ /** * 服务端信息 * @var array */ protected $server = []; /** * 数据库配置 * @var array */ public $dbConfig = []; /** * 路由配置 * @var array */ static public $route = []; ~~~ **全局常量命名** 使用英文名词、动词,所有字母都使用大写,以下划线分隔每个单词,例: ~~~ define( 'WEBSITE_NAME', '名称' ); define( 'WEBSITE_URL', '地址' ); ~~~ **全局变量命名** 使用英文名词、动词,所有字母都截取首字母并且为大写,首个字符以下划线分割且以下划线分隔每个单词,例: ~~~ $_OG = []; $_OGDB = []; ~~~ **数组变量命名** 使用英文名词、动词,以下划线作为单词的分隔,单词的首个字母使用小写,以字符串Array为后缀,例: ~~~ $scope_array = array(); $bookId_array = array(); ~~~ **对象变量命名** 使用英文名词、动词,以大写字母作为单词的分隔且在后面加上对象的扩展后缀,其他的字母均使用小写,单词的首个字母使用大写,不使用下划线,例: ~~~ $userModel = new UserModel() $wechatTool = new WechatTool(); ~~~ **静态方法编写规范** * 静态公共方法的命名以下划线作为每个单词的分割符。 * 在公共全局方法中为了避免方法重新定义请加上`function_exists`的判断。 * 每个方法需要写明注释并且参考以下格式。 ~~~ if(!function_exists('input')) { /** * 获取请求参数,类似于tp * @access protected * @param string|false $name 变量名 * @param mixed $default 默认值 * @return mixed */ function input($name = '', $default = null) { global $_GPC; if (empty($_GPC)) { $_GPC = array_merge($_GET,$_POST,$_COOKIE); } return isset($_GPC[$name]) ? $_GPC[$name] : $default; } } ~~~ **类编写规范** * 目录使用小写+下划线; * 类库、函数文件统一以`.php`为后缀; * 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致; * 类文件采用驼峰法命名(首字母大写),其它文件采用小写+下划线命名; * **类名和类文件名保持一致**,统一采用驼峰法命名(首字母大写); ~~~ // +---------------------------------------------------------------------- // | onegow [ WE CAN DO IT MORE SIMPLE] // +---------------------------------------------------------------------- // | Copyright (c) 2016-2018 http://onegow.com All rights reserved. // +---------------------------------------------------------------------- // | Author: MeYe Email:55585190@qq.com // +---------------------------------------------------------------------- defined('IN_IA') or exit('Access Denied'); class User extends Base { /** * 用户信息 * @var array */ protected $user = []; /** * 用户中心首页 */ public function index() { $this->assign('user',$this->user); return $this->view(); } } ~~~ ## 三、语法书写篇 **大括号{}规则** 将大括号左边放在和判断语句同一列且多一个空格,右边则放在下方和左边对齐,例: ~~~ if ( $condition ) { ... } ~~~ **代码缩进规则** 使用制表符缩进(TAB键)或四个空格。如果缩进层数大于四的时候,请重新设计该项业务逻辑的算法。 **小括号()规则** 不要把小括号和关键词、方法名、方法参数紧贴在一起,要用一个空格分隔,例: ~~~ if ( $condition ) { ... } function addAccount( $inputDataArray ) { ... } ~~~ **if .. else ... 规则** ~~~ if ( $condition1 ) { ... } else if ( $condition2 ) { ... } else { ... } ~~~ 尽可能避免以下使用方式,例: ~~~ if ( $condition1 ) ... else ... ~~~ **switch规则** 每个case块结束处必须加上break,而default总应该存在处理未知情况,例: ~~~ switch( $condition ) { case $value1: ... break; case $value2: ... break; default: ... break; } ~~~ **声明定位规则** 声明代码块需要对齐,且初次使用变量时需要初始化,例: ~~~ $tableName = ''; $databaseObject = ''; ~~~ 不使用以下方式,例: ~~~ $tableName; $accuntName = ''; $databaseObject = ''; ~~~ **数组定义规则** 数组元素代码块需要对齐,例: ~~~ $sqlData = [ 'nickname' => 'MrYe', 'age' => '20', 'height' => '173cm', ]; ~~~ ## 四、其它说明篇 所有类方法必须有返回值,除结果简单外返回true或者false之外,其它方法应返回不同的值。 不要采用缺省方法测试非零值,必须显式测试,例: ~~~ if( false != $this->isAjax() ) { } else { } ~~~ 不要使用以下方式,例: ~~~ if( $this->isAjax() ) { } else { } ~~~ 不要使用三元逻辑符 ? :,但对变量的赋值除外,例: ~~~ $_GET['act'] = !empty( $_GET['act'] ) ? $_GET['act'] : 'v_login'; ~~~ * 对于get、post、session、cookie类型变量,必须使用框架内部方法进行定义和调用。 * 尽可能使用单引号''而不是双引号''。 * 使用完毕后的数组变量、对象变量、查询集合必须马上使用unset()、free\_result()释放资源。 * 一个php文件只能包含一个类定义编码,以类名称作为文件名称。 * 如果发觉您在程序中的命名只有少量能和其对应事物相匹配的话,请重新设计系统。 * 在为类命名前首先要知道它是什么。如果通过类名提供的线索,您还是想不起这个类是什么的话,那么您的设计是做得不够好。 * 超过三个单词组成的混合名是容易造成系统各个实体间的混淆,请重新设计类。 * 通常每个方法只执行一项逻辑动作事务,所以对它们的命名应该清楚的说明它们是做什么的:用checkForErrors()代替errorCheck(),用dumpDataToFile()代替dataFile()。 ## 五、程序注释篇 **类的注释** ~~~ // +---------------------------------------------------------------------- // | onegow [ WE CAN DO IT MORE SIMPLE] // +---------------------------------------------------------------------- // | Copyright (c) 2016-2018 http://onegow.com All rights reserved. // +---------------------------------------------------------------------- // | Author:【作者名称】 Email:【作者邮箱】 // +---------------------------------------------------------------------- // | 【类的用途】 // +---------------------------------------------------------------------- ~~~ **类方法的注释** ~~~ /** * 【方法的用途】 * @param integer $id 用户id * @return array|false|\PDOStatement|string|Model * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ ~~~ **类属性的注释** ~~~ /** * 【类属性的说明】 * @var null */ ~~~ **代码流程注释** ~~~ //判断是否是ajax请求 if( $this->isAjax() ) { } else { } ~~~