我的规范 - 通用规范 ¶
本套文章是顺着PHP的WEB开发线路写下来的,所以下面我个人整理出来的代码规范也是针对PHP和JS这些的,请大牛们不要拿C#/JAVA/C++这些来喷我哦呵呵。
这套代码规范2013年从雏形开始修订至今已经实施了许久,其成效已经不用怀疑,项目成员都能较快速地互相阅读对方的代码,但目前还是有一些局限,不至于细到程序怎么设计,所以程序设计思路还不能快速阅读,但至少书写阅读上已经没有困难。
其实可以进一步规范的空间的确还有很多,因为一般脚本语言本身是松散不严谨的,但我这套规范制定下来的中心思想是:
该按照逻辑思维排版的地方就按照逻辑思维去排版(主要是缩进),满足阅读逻辑。
参数多的地方以空格隔开以便看清楚一个个参数,防止出现N个不同的值堆在一起混淆视觉难以阅读的情况。
代码要体现出整洁的风格,让任何参加项目的人都觉得这是个有素质的团队,至少从编码能力上。
然而如果你有更好的建议欢迎在下面回复留言!谢谢!
对违反代码规范者的惩罚声明: ¶
通过主管设定的方式随机抽取一名部门同事后,需要答应这位同事购买2元到5元之间的东西送给TA,比如一盒纯牛奶!
手抄相关规范条则3次,情况严重者5到10次(只是抄那一句话,比如"所有if语句块都要用花括号包住",但有的会比较差,包括示例代码也要抄!)
下面是通用规范的正文: ¶
所有代码规范和开发规范等说明在特殊情况下可以特殊处理,视具体情况而定。
文件名和文件夹名用中划线分词。
变量设置初始值的时候,要根据它的使用用途来初始化为不同的值,比如用于存放计数的变量,它的初始值应该是
0
而不是''
,也不能是false
。约定变量可以保持原有的约定变量名,不需要另外详细命名(前提是当该作用域没有相同作用的约定变量时,比如只有1个for循环)。
约定变量就是大部分程序员都惯用的一种变量名,比如for循环里的
i
j
k
变量,捕捉异常里的e
变量等等;然而PHP的foreach里的$k
(就是 $key)。全部缩进都要尽量使用TAB符而不是空格(一是字节大小问题,二是大部分编辑器都可以设置4个空格字长显示tab符,一般代码编辑/阅读场景下不存在显示不统一的问题)。
等号,双目运算符和三目运算符的两边都要加空格。
a=1; //错 a = 1; //对 a = 1+2; //错 a = 1 + 2; //对 a = b?1:2; //错 a = b ? 1 : 2; //对
运算符加空格隔开运算参数可以使运算表达式阅读起来舒服些,也比较工整,这不仅仅是我个人感受,你看人家开源代码也这样。
一行只写一句代码(但PHP模板文件尽量做到,太短时可以挤在一行,模板里的逻辑块都要有花括号包住)。
php模板里允许这样将整个 if 写在一行:
<img<?php if($a == 1){ echo ' class="xxx"'; }?> src="..." />
顺便推荐这样写,开头阅读可能不习惯,但要理解这个意思并上手也不困难:
<img<?php $a == 1 && print(' class="xxx"'); ?> src="..." />
if,else,for,while,function
里面的代码块要基于外层代码缩进一个tab
,并且都要用花括号包住里面的代码(尽管只有1行)。switch里面的
case和default
关键字也要缩进。例子:
switch(value){ case 1: XXXXX case 2: YYYYY default: ZZZZZ }
每一块不同作用的工作代码之间要空开一行(这个不好界定,自行把握)。
空函数/方法可以全部写在一行。
用于保存 int、string、bool、array 以外的变量类型初始化赋默认值时,要用
null
作为默认值。函数与方法里面的第一行不要多余地拍多一个空行。
变量,函数名,对象方法名都用小写驼峰命名。
字符串都用单引号。
当变量在 if、for、while 等控制结构后面要进行使用,而控制结构内又要对变量做计算的时候,该变量必须在控制结构外面先进行声明并赋予默认值。
if(a == b){ c = 1; } 执行一个函数一个函数//错误! 这里 a 不一定等于 b,所以 c 变量不一定会存在
if(a == b){ c = 1; }else{ c = 2; } 执行一个函数一个函数//错误!虽然有个 else,但是项目开发过程中根据需求的变化,else 可能会被撤销,到时候 $c 就会得不到赋值,一般程序员也不会完全检查这些,就会导致bug发生,所以也不行,必须在if前先声明变量c。
数组//错误!当数组为空数组的时候进不去 for 循环,所以 a 变量不会产生。
while、switch这些控制结构也是类似,请注意。