PHP 代码规范简洁之道

  1. 统一的编码规范

编码规范往简单说其实就是三个方面:

换行

空格

变量命名

放在 PHP 里面,还有一些附加的地方,比如关键字大小写,语法糖的使用(array() 与 [] 等)的问题。之前整理过 PSR 的标准,也找过 php-cs-fixer 这样的工具。这些都是规范代码的重要手段。有统一的标准,配合上工具的检查,形成统一的编码约束不是什么难题。

没有规范,不同的人甚至同一个人在空格、换行和命名上都有可能是十分随意的。代码一长,回使整个文件看起来无比杂乱。

典型的例子比如:if 和 else 的组合,可以写出无数种风格,比如:

<?php
# 单语句不写大括号
if (true) doSomething();
# else 大括号换行 十分占篇幅
if (true)
{
    doSomething();
}
else {
    doElseThings();
}
# 此外还有关键字后不带空格,随意缩进等等
# ...
再比如变量函数命名的问题上,各种混搭风格层出不穷:

<?php
# 全小写
$someparam1 = null;
# 首字母下环线
$_some_param_1 = null;
# 某些库的类,下划线和大小写混用
class Abstract_ClassA
{
}

这里并不探讨各种写法的优缺点,只是风格需要保持统一,不要混用。

  1. 良好的编码习惯

如果你仔细看过 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',
];
  1. 寻找最优的写法

写代码的过程中,最优的写法和编码习惯又不是同一件事情。这里要说的指的是如何遵循 PHP 的语言特性或者框架的特征,充分发挥语言和框架的能力来减少冗余。

比如在获取前端传入的参数的时候,很多时候能见到这样的代码:

<?php
$param = isset($_POST['param']) ? $_POST['param'] : '';

更有甚者一些框架将前端传入的参数封装了一层,比如 $this->request->data['param'],如果再去用 isset 或者 array_key_exists 判断,整个获取参数的语句就会变得很长。

某些情况下使用三元运算符的时候需要注意 ?: 是可以合并使用的。

其实我们应该去尝试封装这种写法,防止同样的变量出现在一个语句中多次的情况。对于默认值的赋予,可以调研框架是否有封装提供,或者通过强制类型转换的方式进行。

还有一种情况是条件和循环嵌套的时候。比如从数组里抽取某一个字段,或者对某一个字段的值进行处理的时候,善用 array_map 以及引用(&)往往能节省不少工作量。但是使用的时候也要注意数组指针最后的位置。

在根据条件返回结果时,需要善用 return。还有就是合理的抽象与封装。

  1. review 自己的代码

除了以上提到的在日常开发中需要注意的一些问题。还有就是事后的工作。

我相信很多人在看自己以前的代码的时候都有一种其实有更好的写法的感觉。随着时间的推移自己总会有更丰富的阅历,更多的想法。偶尔 review 自己的代码也是对过去的总结,也许会有新的感知。

  1. 推广给你的队友

团队项目中,队友的配合对整个代码的规范起着决定性的作用。一个团队中有一个人不遵守规范,而又要到处修改代码的时候,很快就能破坏到所有的约束。

有统一的标准,有良好的执行力才能完成这件工作。

====================================分割线================================
文章转载自 开源中国社区[http://www.oschina.net]

时间: 2024-10-31 11:06:49

PHP 代码规范简洁之道的相关文章

JavaScript 代码规范

所有的 JavaScript 项目适用同一种规范 设计原则: 1.原子思想:即每个function就做一件事: 2.归纳思想:将同一类的操作,全部整合到一起: 3.方便维护:可以便于后来人进行快速维护: 4.方便拓展:即可以根据每个不同的项目进行不同的更改: 5.通用前端设计模式:一些前端可以通用的设计模式 6.注意写好注释,将注释写的具体点: JavaScript 代码规范 代码规范通常包括以下几个方面: 变量和函数的命名规则 空格,缩进,注释的使用规则 其他常用规范-- 规范的代码可以更易于

iOS代码规范

这篇规范一共分为三个部分: 核心原则:介绍了这篇代码规范所遵循的核心原则. 通用规范:不局限于iOS的通用性的代码规范(使用C语言和Swift语言). iOS规范:仅适用于iOS的代码规范(使用Objective-C语言). 一. 核心原则 原则一:代码应该简洁易懂,逻辑清晰 因为软件是需要人来维护的.这个人在未来很可能不是你.所以首先是为人编写程序,其次才是计算机: 不要过分追求技巧,降低程序的可读性. 简洁的代码可以让bug无处藏身.要写出明显没有bug的代码,而不是没有明显bug的代码.

【项目篇】Android团队项目开发之统一代码规范

前言 团队项目开发前的统一三要素:统一需求/开发文档,统一代码规范,统一环境(编译/测试/发布). 一个项目团队,要想有高效的产出,必须在团队协作上下好功夫,必须在项目开发统一进度上做好协调.只有在高效的协同环境下,才能有优质的产出.这是我多年的经验之谈.也是配合过多个团队之后的深刻感悟. 每一个程序员都是有独立开发思维模式,都有自己的编码行为和操作习惯.所以,在一个团队中,怎么做到更高效的协同,不仅仅是每个开发者自身的协同配合能力,更重要的是项目管理者,怎样做到统一要求和统一实行. 举个很简单

seo之首页head区代码规范

head区是指首页HTML代码的<head>和</head>之间的内容. 必须加入的标签,对搜索引擎有很打的影响,下面介绍head区代码规范: 1.公司版权注释 <!---ThesiteisdesignedbyMaketown,Inc06/2000---> 2.网页显示字符集 简体中文:<METAHTTP-EQUIV="Content-Type"CONTENT="text/html;charset=gb2312"> 繁

张建飞:SEOER必须知道的代码规范优化

一个好的网站结构可以更好的获得搜索引擎的青睐,众多SEOER将网站结构改为树状形式的,就以为这是一个好的网站结构了或者说是做好了网站结构的优化了,其实不然代码规范也属于网站结构优化的范畴.然而代码优化往往却被SEOER无情的给忽略或者说丢掉了.在此张建飞谈谈自己对代码优化的看法. 一.缩减代码 网页体积越小访问速度越快,这是众所周知的,同样对于搜索引擎也是一样的道理.访问速度越快,那么搜索引擎是不是会经常来呢,当然不可或缺的是网站要有东西来喂蜘蛛.那么我们应该怎么样去对代码进行优化呢? 首先代码

《中华人民共和国进出口企业代码规范》通知

各省.自治区.直辖市及计划单列市外经贸委(厅.局)本部各直属单位,各商会.协会.学会: 现将<中华人民共和国进出口企业代码规范>印发给你们,请遵照执行. 该标准为强制性行业标准,编号为WM1-1999,自2000年1月1日起实施.标准由对外贸易经济合作部发布并归口管理,对外贸易经济合作部配额许可证事务局负责解释,中国标准出版社出版发行. 附件:如文 附件 WM 中华人民共和国外经贸行业标准 WM1-1999 中华人民共和国进出口企业代码规范 Specification of import an

C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义

类型判断符号:   C#:object a;  if(a is int) { }  用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 instanceof 符号判断   类与接口的继承:    C#:public class MDataRow : List<MDataCell>, IDataRecord, ICustomTypeDescriptor Java:public class MDataRow extends ArrayLi

一个关于代码规范的小问题

问题描述 例: 变量名studentID正确吗 , D要不要大写 ? 本来根据驼峰命名法就不合规范了, 可是我看到官方代码上又大写了. 迷惑, 我是学生 . 问题补充:babydeed 写道 解决方案 Java代码风格. 1. 驼峰式命名(单词无连接字符,单词首字母大写,其余小写): 2. 类的首字母大写(eg:MyClass): 3. 变量名,方法名,成员名首字母小写(eg:name,value,targetObject): 4. 单例对象遵循类的命名方式(eg:GlobalControlle

代码规范检查工具——checkStyle

  简介              Checkstyle是一款检查java程序代码样式的工具,可以有效的帮助我们检视代码以便更好的遵循代码编写标准,特别适用于小组开发时彼此间的样式规范和统一.Checkstyle提供了高可配置性,以便适用于各种代码规范,所以除了可以使用它提供的sun的代码标准外,你也可以定制自己的标准.我们可以在eclipse中安装checkstyle的插件,来方便我们的使用.             Checkstyle可以让我们养成书写良好代码风格的习惯,代码的整洁也减少了