先讲个笑话


我们程序员分两种,一种是:

if( #condition ){
    //codes
}

另一种是:

if( #condition )
{
    //codes
}

你是哪一种呢?


这个笑话比较冷,但是也说明了一个问题 —— 代码风格难以统一。

一个好的代码风格会使程序更容易阅读,提高团队合作的效率不说,自己看着也会赏心悦目,好像自己淫的一手好湿。

而混乱的代码轻则增加团队沟通成本,重则影响团队和谐。所以我认为不论是作为一个团队还是所谓一名开发者,必须坚持自己的程序编写风格。老高偶尔也会因为考虑到一致性而使用我不喜欢的代码风格,事实上这个行为是很不可取的。

所以今后老高今后要改正这个不良习惯,保持自己的代码风格,之前写的都不算 XD 。

我的风格

下面老高精(HU)心(LUAN)整理了一些PHP编码的习惯,不知道有没有和我一样的TX?

编码

编码推荐UTF-8,所以在处理文字长度的时候请使用mb_*系列函数

换行

由于UNIX/Linux、Mac与Windows在换行格式上的差别,请搞清楚运行环境, 再搞清楚CR(carriage return, 符号’r’表示, 十进制ASCII代码是13, 十六进制代码为0x0D), LF(line feed,使用’n’符号表示, ASCII代码是10, 十六制为0x0A), CR/LF的概念,然后在编辑器中把换行格式改为对应的格式即可。

系统换行编码正则
UNIX/Linux换行\r
Mac回车\n
Windows回车+换行\r\n

换行回车的历史,来自豆瓣

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。

这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

注释

注释是为了程序更好理解,所以老高一般会把注释写在需要注释的代码之前,例:

function abc(){
    //先验证权限
    authorized();
}

而有些注释只是想说明执行结果,那么我会把它们放在代码的下一行:

echo date("M d Y H:i:s", mktime (0,0,0,1,1,2000));
//Jan 01 2000 00:00:00

=

=号一般用在赋值和比较,我会在=号链接的逻辑两边各加一个space,同理适用于||&&等逻辑运算,其他比较符号不管,例:

$a = array('I', 'Love', 'U');
if( count($b) == 0 )
{
    if( $a>=0 )
    {
        //code
    }
}

单双引号

这里不多说了,多少一个shift的事儿。

IF

if后直接跟(,$condition左右会有一个空格,而其他的函数则可以不加空格:

if( $a>0 )
{
    $number = strlen('abcde');
    echo 'positive!';
}

代码块

代码块其实就是{}包裹的内容,用在if,switch,while等条件或分支的时候会用到,老高的建议是每个{}必须独占一行。

删除结尾标记?>

这个标记是PHP代码闭合的格式,如果正在写一个纯PHP文件,请移除最后的?>,然后保持最后一行是空行。

参数

定义函数参数的时候,如果有多个参数,除了第一个参数,其他参数之前必须加一个space,例:

json_decode($html, true);

function A($a, $b, $c)
{
    //code
}

不要连续赋值

除非你是高手。。。。。。否则可能会出现意想不到的效果。

$a = $b = 1;
$a = 2;
echo $b;

$a = $b = new DateTime;
$a->setDate(2001, 2, 3);
echo $b->format('Y-m-d');

善用list()

list($a,$b)=array(10,20);

不要hard-coding

善用初始化方法和常量。

避免代码过长

适当换行,例:

if( $a = 'a' ||
    $b = 'b' ||
    $c = 'c')
{
    //code
}

代码中尽量写英文

除非你的英文很差或者有特殊要求。

如果一定有中文

请一定使用全角符号,而且不要忘了结尾的句号。

引用和借鉴

github上的代码如果用到了,请务必标明出处,表要以为开源就是免费午餐,小心你也会吃上官司!你又不是小米公司,就算fork了改了又吃了官司,人家也不怕。

多数源代码都是基于某种协议开放的,这里给出几个关键词:[GPL、APACHE、BSD、LGPL] + Licenses,协议还有版本之分。

推荐模板:

XXX的诞生离不开很多非常棒的开源项目,包括: xxx,xxx,xxx.

不要使用tab缩进

用四个空格缩进,这样不会引起格式的混乱,保证了代码在各IDE里视觉统一,Python同样适用。

总结

代码风格因人而异,如果你还没有悟出自己的风格,那就速度为自己整一个吧!

在此分享一个来自PHPCMS的编码规则,值得参考

老高的网盘链接