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]

PHP 代码规范简洁之道相关推荐

  1. php 代码规范简洁

    1. 统一的编码规范 编码规范往简单说其实就是三个方面: 换行 空格 变量命名 放在 PHP 里面,还有一些附加的地方,比如关键字大小写,语法糖的使用(array()与[]等)的问题.之前整理过PSR ...

  2. 代码规范以及单元测试项目

    一.代码规范重写30道四则运算 /** 作者:程鹏远 题目:30道2年纪四则运算题目 */ #include <iostream.h> #include <stdlib.h> ...

  3. JAVA基础之代码简洁之道

    引言 普通的工程师堆砌代码,优秀的工程师优雅代码,卓越的工程师简化代码.如何写出优雅整洁易懂的代码是一门学问,也是软件工程实践里重要的一环.--来自网络 背景 软件质量,不但依赖于架构及项目管理,更与 ...

  4. 学会这样写代码,一看就是资深工程师,代码简洁之道PHP版本

    文章目录 一.前言 二.规范 2.1 整体结构规范 2.1.1 类的括号前括号单独一行 2.1.2 方法的前括号单独一行 2.1.3 方法内部语句前括号不换行 2.2 变量与常量 2.2.1 变量的命 ...

  5. PHP 代码简洁之道 ( PHP Clean Code)(第二部分)

    PHP 代码简洁之道 ( PHP Clean Code)(第一部分)​ 使用默认参数而不是使用短路运算或者是条件判断 不好的做法: 这是不太好的因为 $breweryName 可以是 NULL. fu ...

  6. JavaScript 代码简洁之道

    测试代码质量的唯一方式:别人看你代码时说 f * k 的次数. 代码质量与其整洁度成正比.干净的代码,既在质量上较为可靠,也为后期维护.升级奠定了良好基础. 本文并不是代码风格指南,而是关于代码的可读 ...

  7. Java代码简洁之道

    Java如何把代码写的简洁? 其实这是一个熟练的过程,有的代码在编写的时候有很多方法你没有见过,所以你只能按照一般写法来做,这也就是经验不足!或者有的时候你没有熟练掌握面向对象的思想,所以无法从全局出 ...

  8. 浅谈代码规范基础调试几道面试题

    废话篇:本文由CSUST的FINAL实验室的LX创作,用途是给予CSUST的小鲜肉们一些关于C语言代码规范的一些基本知识,若本文有什么错误或是表述不清之处,欢迎留言讨论指正. 代码规范: 在讲代码规范 ...

  9. 一篇走心的iOS代码规范!

    前言 关于代码规范的重要性这里不做过多解释,能看到这篇文章说明你已经开始重视代码规范了(代码规范看起来是在限制你的自由和发挥,其实它是在间接的帮助你变得更优秀.). 适当的代码规范和标准绝不是消灭代码 ...

  10. 代码规范-对抗软件复杂度

    1.为什么需要代码规范 任何系统性的项目都需要架构设计,而架构设计的核心命题是控制复杂度. 但随着项目的不断迭代,复杂度就会不断上升,研发效率就会不断下降. 而代码规范正是对抗软件复杂度的有效手段,通 ...

最新文章

  1. 模型的跨界:我拿Transformer去做目标检测,结果发现效果不错
  2. linux硬件控制流,Linux系统学习笔记:异常控制流
  3. java:static关键字
  4. 2022-01-04
  5. zabbix学习小结
  6. PhpStorm配置SVN的完整方法
  7. 物理层接口特性、数据通信模型、物理层基本概念(数据、信号、码元 、信源、信道、信宿 、速率、波特、带宽)...
  8. struts2标签库的使用
  9. could not extract ResultSet/could not execute statement
  10. headerutf php_php header设置编码的方法
  11. 在使用体验上,VS远远不如Eclipse
  12. 【HDU6051】if the starlight never fade
  13. 解决Deepin开机锁屏状态下能够使用触控板而解锁之后无法使用触控板的BUG
  14. Abaqus6.14.4 Linux详细图文安装教程
  15. 计算机二级c语言考试上机内容,计算机二级c语言上机考试操作步骤及流程
  16. 自媒体视频搬运,技术分享给大家!
  17. Silverlight 4 - MVVM with Commanding and WCF RIA Services
  18. 统一组织机构信用代码(从正则到方法验证,JavaScript)
  19. android开发 问卷调查案例_安卓 问卷调查Demo 原生代码
  20. android9模拟刘海屏,刘海屏  |  Android 开源项目  |  Android Open Source Project

热门文章

  1. shell脚本(四)
  2. jQuery表单插件ajaxForm,ajaxSubmit使用详解
  3. 记录php运行日记的方法
  4. 生成swc库文件若干方法
  5. 内核parameter mem解析
  6. ATF(ARM Trusted firmware)完成启动流程
  7. python设计选择题代码_《Python程序的设计》试题库完整
  8. 16.最接近的三数之和
  9. 哈夫曼树的生成详解(C++)
  10. java反射 优缺点_Java反射机制的原理与使用(反编译)