编码规范往简单说其实就是三个方面:php
换行html
空格前端
变量命名git
放在 PHP 里面,还有一些附加的地方,好比关键字大小写,语法糖的使用(array()
与 []
等)的问题。以前整理过 PSR 的标准,也找过 php-cs-fixer 这样的工具。这些都是规范代码的重要手段。有统一的标准,配合上工具的检查,造成统一的编码约束不是什么难题。github
没有规范,不一样的人甚至同一我的在空格、换行和命名上都有多是十分随意的。代码一长,回使整个文件看起来无比杂乱。数据库
典型的例子好比:if
和 else
的组合,能够写出无数种风格,好比:数组
<?php # 单语句不写大括号 if (true) doSomething(); # else 大括号换行 十分占篇幅 if (true) { doSomething(); } else { doElseThings(); } # 此外还有关键字后不带空格,随意缩进等等 # ...
再好比变量函数命名的问题上,各类混搭风格层出不穷:php7
<?php # 全小写 $someparam1 = null; # 首字母下环线 $_some_param_1 = null; # 某些库的类,下划线和大小写混用 class Abstract_ClassA { }
这里并不探讨各类写法的优缺点,只是风格须要保持统一,不要混用。框架
若是你仔细看过 PSR 的标准,可能也会注意到某些地方实际上是标准没法涉及到的。好比一个超长的表达式在何时换行,如何缩进等。函数
这里涉及到的就是编码习惯的约束问题。
好比方法的链式的调用的问题,好比某些数据库查询的封装:
<?php # 不换行的状况下句子会很长 $result = $this->db->select('id')->where('a', 1) ->groupBy('a')->orderBy('id', 'DESC')->result(); # 这种状况下我建议是一个条件一行,保持缩进 $result = $this->db->select('id') ->where('a', 1) ->groupBy('a') ->orderBy('id', 'DESC') ->result();
还有数组定义,某些数组成员字符串很长的状况下的写法:
<?php $array = ['abcdefg', 'acbdfeg', 'bcadgfe', 'cdadgef']; # 若是成员太长,我建议拆解,这样 $array = [ 'abcdefg', 'acbdfeg', 'bcadgfe', 'cdadgef', ];
写代码的过程当中,最优的写法和编码习惯又不是同一件事情。这里要说的指的是如何遵循 PHP 的语言特性或者框架的特征,充分发挥语言和框架的能力来减小冗余。
好比在获取前端传入的参数的时候,不少时候能见到这样的代码:
<?php $param = isset($_POST['param']) ? $_POST['param'] : '';
更有甚者一些框架将前端传入的参数封装了一层,好比 $this->request->data['param']
,若是再去用 isset
或者 array_key_exists
判断,整个获取参数的语句就会变得很长。
某些状况下使用三元运算符的时候须要注意 ?:
是能够合并使用的。
其实咱们应该去尝试封装这种写法,防止一样的变量出如今一个语句中屡次的状况。对于默认值的赋予,能够调研框架是否有封装提供,或者经过强制类型转换的方式进行。
还有一种状况是条件和循环嵌套的时候。好比从数组里抽取某一个字段,或者对某一个字段的值进行处理的时候,善用 array_map
以及引用(&
)每每能节省很多工做量。可是使用的时候也要注意数组指针最后的位置。
在根据条件返回结果时,须要善用 return
。还有就是合理的抽象与封装。
除了以上提到的在平常开发中须要注意的一些问题。还有就是过后的工做。
我相信不少人在看本身之前的代码的时候都有一种其实有更好的写法的感受。随着时间的推移本身总会有更丰富的阅历,更多的想法。偶尔 review 本身的代码也是对过去的总结,也许会有新的感知。
团队项目中,队友的配合对整个代码的规范起着决定性的做用。一个团队中有一我的不遵照规范,而又要处处修改代码的时候,很快就能破坏到全部的约束。
有统一的标准,有良好的执行力才能完成这件工做。
私博地址:http://0x1.im