PHP软件编码规范

 参见: http://www.phpnotes.top/2017/11/24/php/35/

 

PHP编码规范


目录

1命名... 3

1.1        变量... 3

约束... 3

1.1.1普通变量... 3

1.1.2静态变量... 4

1.1.3局部变量(包含类的局部变量)... 4

1.1.4全局变量... 4

1.1.5类变量... 5

1.2常量... 5

1.2.1全局常量... 5

1.2.2类常量... 5

1.3类... 6

1.4方法(包含类方法)... 6

1.5文件和目录... 7

2注释... 8

2.1变量与语句... 8

2.2函数... 9

2.3 类... 9

3格式... 10

3.1代码行... 10

3.2 空行... 10

3.3条件语句... 11

3.4布尔表达式... 11

5其他注意事项... 12

格式化... 12

 

 

 

 

 

 

 

 

 

 

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.     defaultbreak;  

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 进行格式排版,必须进行代码的格式化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值