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]

目录
相关文章
|
7月前
|
安全 编译器 PHP
PHP 8 新特性详解:更高效、更简洁的编程体验
本文详细介绍了PHP 8的新特性及其对开发者日常工作的影响。通过分析这些新特性,读者可以更好地理解PHP 8相较于之前版本的改进之处,并在实际项目中加以应用。
|
固态存储 安全 前端开发
PHP简洁之道(转)
严格的代码规范有助于写出优质的代码
1248 0
|
PHP 机器人 关系型数据库
|
4月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
2月前
|
前端开发 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
【10月更文挑战第21天】 本文将深入浅出地探讨如何使用PHP与MySQL构建一个动态网站,从环境搭建到项目部署,全程实战演示。无论你是编程新手还是希望巩固Web开发技能的老手,都能在这篇文章中找到实用的技巧和启发。我们将一起探索如何通过PHP处理用户请求,利用MySQL存储数据,并最终呈现动态内容给用户,打造属于自己的在线平台。 ####
64 0
|
4月前
|
NoSQL 关系型数据库 MySQL
不是 PHP 不行了,而是 MySQL 数据库扛不住啊
【9月更文挑战第8天】这段内容讨论了MySQL在某些场景下面临的挑战及其原因,并指出这些问题不能完全归咎于MySQL本身。高并发读写压力、数据量增长以及复杂查询和事务处理都可能导致性能瓶颈。然而,应用程序设计不合理、系统架构不佳以及其他数据库选择和优化策略不足也是重要因素。综合考虑这些方面才能有效解决性能问题,而MySQL通过不断改进和优化,仍然是许多应用场景中的可靠选择。
175 9
|
1月前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发:从基础到实践####
本文将深入探讨PHP与MySQL的结合使用,展示如何构建一个动态网站。通过一系列实例和代码片段,我们将逐步了解数据库连接、数据操作、用户输入处理及安全防护等关键技术点。无论您是初学者还是有经验的开发者,都能从中获益匪浅。 ####
|
2月前
|
安全 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
——深入探索LAMP栈下的高效数据交互与处理技巧 ####
|
1月前
|
关系型数据库 MySQL PHP
php实现一个简单的MySQL分页
通过本文的详细步骤和代码示例,我们实现了一个简单的PHP MySQL分页功能。主要步骤包括计算总记录数、设置分页参数、查询当前页的数据以及生成分页链接。这种分页方式适用于大多数Web应用,能够有效提升用户体验和页面响应速度。
29 4
|
2月前
|
关系型数据库 MySQL PHP
PHP与MySQL动态网站开发实战指南####
深入探索PHP与MySQL的协同工作机制,本文旨在通过一系列实战案例,揭示构建高效、稳定且用户友好的动态网站的秘诀。从环境搭建到数据交互,再到最佳实践分享,本文为开发者提供了一条清晰的学习路径,助力其在LAMP(Linux, Apache, MySQL, PHP/Perl/Python)栈上实现技术飞跃。 ####