参见: http://www.phpnotes.top/2017/11/24/php/35/
PHP编码规范
目录
1命名
1.1 变量
约束
所有类型变量,均遵守以下约束:
1、 整型变量 以i开头
1. $iApiNum = 100; //API接口总数
2、 浮点型变量以f开头
1. $fApiRand = 100.44; //API接口随机数
3、 字符串类型变量以s开头
1. $sApiLogName = ‘log.txt’;//API日志名
4、 数组类型变量以a开头,确定几维数组则加上对应维数数字,a1:一维,a2:二维,若不确定或维度可能变化就只以a开头
1. $a1Log = array(); //一维
2. $a2Log2 = array(array()); //二维
5、 对象类型变量以o开头
1. $oWord = new WordClass(); //实例化wordclass对象
6、 资源类型变量以r开头
1. $rMysql = $this->db->query($sql); //执行sql语句返回的资源结果
7、 布尔类型变量以b开头
1. $_bStatus = false; //该记录的状态值
1.1.1普通变量
普通变量命名遵循以下规则:
a. 无前缀变量首字母使用小写;
b. 多个单词间不使用间隔,除第一个单词外,其他单词首字母大写。以小驼峰的方式命名
例如:
1. $a1ApiLogs = array(); //api接口调用日志参数
1.1.2静态变量
静态变量命名遵循以下规则:
a. 静态变量使用小写的s_开头;
b. 静态变量前缀后,无约束前缀变量首字母使用小写;
c. 多个单词间不使用间隔,除第一个单词外,其他单词首字母大写。以小驼峰的方式命名
例如:
1. $s_sBaseDir = "xxx"; //根目录地址
2. $s_iPictureCnt = 10; //图片数量
1.1.3局部变量(包含类的局部变量)
局部(函数内部)变量命名遵循以下规则:
a. 变量使用’_'开头;
b.无约束前缀变量首字母使用小写;
c. 多个单词间不使用间隔,除第一个单词外,其他单词首字母大写。以小驼峰的方式命名
例如:
1. $_sName = "xxx"; //姓名
2. $_iID = 1; //ID
3. $_a1UserRights = array(); //用户权限
1. /**
2. * 私有方法
3. * @param type $arg1 参数1
4. * @param type $arg2 参数2
5. * @return boolean
6. */
7. private function _myFunction($arg1, $arg2) {
8. return $arg1 + $arg2;
9. }
1.1.4全局变量
全局变量命名遵循以下规则:
a.全局变量带前缀’g_'
b.无约束前缀变量首字母使用小写
c.多个单词间不使用间隔,除第一个单词外,其他单词首字母大写。以小驼峰的方式命名
例如:
1. $g_sJsSrc = 'xxx'; //js的存放目录
2. $g_iCssNum = 10; //css的数量
1.1.5类变量
类变量命名遵循以下规则:
a. 无约束前缀变量首字母使用小写
b. 多个单词间不使用间隔,除第一个单词外,其他单词首字母大写。以小驼峰的方式命名
c. 声明访问控制级别,无需被外部调用的一律设置为private,需继承的设置为protected
例如:
1. protected $sWordPicDir; //word所需的柱状图保存目录
2. protected $iwordReportNum; //生成的word报告数量
3. protected $fRand; //随机数
1.2常量
1.2.1全局常量
a. 所有字母使用大写
b. 全局常量多个单词间使用’_'作为间隔。
例:
1. const INPUT_FILE = 'lefile'; //页面文件上传控件名
2. const FILE_NAME = 'name'; //实际的上传文件名
3. const FILE_NAME_TEMP = 'tmp_name'; //后台收到文件以此默认的临时文件名保存
1.2.2类常量
a. 所有字母使用大写
b. 类常量多个单词间使用’_'作为间隔。
c. 文件类常量以FILE_开头,输入框类以INPUT_开头,模型层类以M_开头,控制器类以C_开头,视图类以V_开头。
例如:
1. const INPUT_FILE = 'lefile'; //页面文件上传控件名
2. const FILE_NAME = 'name'; //实际的上传文件名(文件类)
3. const M_PATH = 'management/m_user'; //模型层路径
4. const C_PATH = 'management/user'; //本控制器路径
5. const V_PATH = 'management/v_user'; //视图路径
1.3类
php中类命名遵循以下规则:
a. 以大写字母开头;
b. 多个单词组成的变量名,单词之间不用间隔,各个单词首字母大写。以大驼峰的方式命名
例如:
1. /**
2. * 批量生成报告类
3. * @author xiangqingshan
4. * @date 2017.07.20
5. */
6. Class BatchReport extends MY_Controller {
7.
8. }
c. 类的文件名,命名需与类一致(包括大小写)。若是控制器和模型层类,文件命名和类名相同,例BatchReport.php。若是功能类,类名+Class作为文件名,例如WordClass.php
1.4方法(包含类方法)
方法或函数命名遵循以下规则:
a. 首字母小写;
b. 多个单词间不使用间隔,除第一个单词外,其他单词首字母大写。以小驼峰的方式命名
c. 私有方法以‘_’开头,保护方法以‘__’开头,普通方法和公共方法无需前缀。
例子:
普通方法
1. /**
2. * 普通方法
3. * @return boolean
4. */
5. function myFunction() {
6. return true;
7. }
私有方法
10. /**
11. * 私有方法
12. * @param type $arg1 参数1
13. * @param type $arg2 参数2
14. * @return boolean
15. */
16. private function _myFunction($arg1, $arg2) {
17. return true;
18. }
保护方法,保护方法命名不要和已有的魔术方法重复
1. /**
2. * 保护方法
3. * @param type $arg1 参数1
4. * @param type $arg2 参数2
5. * @return boolean
6. */
7. protected function _myFunction($arg1, $arg2) {
8. return true;
9. }
1.5文件和目录
程序文件名和目录名命名均采用有意义的英文方式命名,不使用拼音或无意义的字母,同时均必须使用大写字母开头,多个单词间不使用间隔,其他单词首字母大写。以大驼峰的方式命名。
2注释
2.1变量与语句
变量定义时或是单行语句,注释写在同行一个空格后。
例如:
1. $a1ApiLogs = array(); //api接口调用日志参数
2. $this->load->model(‘user’); //加载user模型层
如果是一段语句,注释时,注释写大括号后面,若是语句过长,则写在在语句开始的上方
例如:
1. //循环打印数字(语句长时写在这)
2. for($_i=0; $_i<10; $_i++){ //循环打印数字(语句短时写在这)
3. echo $_i;
4. }
1. foreach ($_a1FailData as $_iKey => $_sVal) { //$_iKey:数组的键名 =>$_sVal数组的元素值
2.
3. }
如若是判断分支,在每个分支后进行注释
例如:
1. if(!empty($a1Arr)){ //如果数组不为空,执行XXX操作
2.
3. } else{ //执行XXX操作
4.
5. }
1. switch($sNum){
2. case '1' : { //备注
3. //code
4. break;
5. }
6. case '2' : { //备注
7. //code
8. break;
9. }
10. case '3' : { //备注
11. //code
12. break;
13. }
14. case '4' : { //备注
15. //code
16. break;
17. }
18. default: break;
19. }
2.2函数
函数和方法的注释写在函数和方法的前面,可通过编辑器/** + 回车 快速生成注释块,注释块例如
1. /**
2. * 调用发送短信接口
3. * @param type $mobile 手机号
4. * @param type $content 短信内容
5. * @param type $system 哪个系统调用的 例如MGAS,若可以获取到操作者,则以下划线分隔加上操作者 例MGAS_csc
6. * @param type $function 哪个控制器哪个方法调用,下划线分隔 例如User_Reg
7. * @return boolean|string 成功返回true,失败返回错误原因
8. */
9. public function sendSMS($mobile = '', $content = '', $system = '', $function = '') {
10. return true;
11. }
2.3 类
类的注释采用里面的参考例子方式,需要注明类的功能,负责人等信息,若有其他特殊信息,需注明。
1. /**
2. *文献数据管理--突变
3. * @author caisicen
4. * @version v1.0
5. * @date 20160805
6. */
7. class LiteratureMutation extends MY_Controller {
8.
9. }
3格式
3.1代码行
每条语句独占一行。若语句过长,超出80个字符,需在适当地方换行(如逗号、问号、冒号处)。
3.2空行
不要有多余的空行,需要空行的地方只空一行。
例如:
1. namespace app\management\Controller;
2.
3. use Db;
4. use Controller;
5.
6. /**
7. * 自定义功能类
8. * @author caisicen
9. * @date 2017.07.20
10. */
11. class MyClass {
12.
13. /**
14. * 自定义保护方法
15. * @param type $arg1 参数1
16. * @param type $arg2 参数2
17. * @return boolean 根据结果返回true or false
18. */
19. protected function __myFunc1($arg1, $arg2) {
20. return true;
21. }
22.
23. /**
24. * 自定义私有方法
25. * @param type $arg1 参数1
26. * @param type $arg2 参数2
27. * @return boolean 根据结果返回true or false
28. */
29. private function _myFunc2($arg1, $arg2) {
30. return true;
31. }
32. }
3.3条件语句
当条件语句简单时,可写在一行,例如:
1. if($sResult != 0) return false;
除此之外,若有elseif,统一用elseif而不用else if
3.4布尔表达式
若表达式太长,以致违背了3.1节的限制,统一在逻辑运算符后面换行,例如:
1. $a1Arr = [1, 2, 3, 4, 1]; //包含5个数字元素的一维数组
2. $sEnStr1 = 'ABCDEFG'; //大写的字符串
3. $sEnStr2 = 'abcdefg'; //小写的字符串
4. $iNum1 = 10; //整型数字
5. $bStatus = true; //布尔型true值变量
6. //判断数组中是否有重复值、比较两个字符串忽略大小写是否相等、比较$iNum1和$bStatus是否相等
7. if (count($a1Arr) === count(array_unique($a1Arr)) && strtolower($sEnStr1) === strtolower($sEnStr2) && $iNum1 === $bStatus) {
8.
9. }
表达式可以改写为:
1. if (count($a1Arr) === count(array_unique($a1Arr)) && //判断数组中是否有重复值
2. strtolower($sEnStr1) === strtolower($sEnStr2) && //比较两个字符串忽略大小写是否相等
3. $iNum1 === $bStatus //比较$iNum1和$bStatus是否相等
4. ) {
5.
6. }
数据库语句过长时也采用此种方式,在逻辑符后换行。
5其他注意事项
格式化
每个缩进以4个空格作为缩进符,可在编辑器中调整tab键为4个空格符,也可选中代码使用
Shift+alt+F 进行格式排版,必须进行代码的格式化。