将代码写的简洁并且易读易懂是每一位优秀的coder所应该具备的基本功。

前几天在github上看到clean-code-php这个项目,感觉很有收获,于是在这里记录一下。

使用有意义并且可读的变量名称

Bad:

$ymdstr = $moment->format("y-m-d");

Good:

$currentDate = $moment->format("y-m-d");

对同一只类型的变量使用同样的词汇

Bad:

getUserInfo();

getUserData();

getUserRecord();

getUserProfile();

Good:

getUser();

使用易于查找的命名

Bad:

// 这里的4是什么鬼??

if ($user->access & 4) {

// ...

}

Good:

class User

{

const ACCESS_READ = 1;

const ACCESS_CREATE = 2;

const ACCESS_UPDATE = 4;

const ACCESS_DELETE = 8;

}

if ($user->access & User::ACCESS_UPDATE) {

// do edit ...

}

不要让读者猜

Bad:

$l = ["Austin", "New York", "San Francisco"];

for ($i = 0; $i < count($l); $i++) {

$li = $l[$i];

doStuff();

doSomeOtherStuff();

// ...

// ...

// ...

// $li 变量代表什么???

dispatch($li);

}

Good:

$locations = ["Austin", "New York", "San Francisco"];

foreach ($locations as $location) {

doStuff();

doSomeOtherStuff();

// ...

// ...

// ...

dispatch($location);

}

避免过深的嵌套

Bad:

function isShopOpen($day)

{

if ($day) {

if (is_string($day)) {

$day = strtolower($day);

if ($day === "friday") {

return true;

} elseif ($day === "saturday") {

return true;

} elseif ($day === "sunday") {

return true;

} else {

return false;

}

} else {

return false;

}

} else {

return false;

}

}

Good:

function isShopOpen($day)

{

if (empty($day) && ! is_string($day)) {

return false;

}

$openingDays = [

"friday", "saturday", "sunday"

];

return in_array(strtolower($day), $openingDays);

}

Bad:

function fibonacci($n)

{

if ($n < 50) {

if ($n !== 0) {

if ($n !== 1) {

return fibonacci($n - 1) + fibonacci($n - 2);

} else {

return 1;

}

} else {

return 0;

}

} else {

return "Not supported";

}

}

Good:

function fibonacci($n)

{

if ($n === 0) {

return 0;

}

if ($n === 1) {

return 1;

}

if ($n > 50) {

return "Not supported";

}

return fibonacci($n - 1) + fibonacci($n - 2);

}

不要添加不必要的上下文

如果你的类/对象已经说明了一些信息,不要在你的变量名和属性里重复

Bad:

class Car

{

public $carMake;

public $carModel;

public $carColor;

//...

}

Good:

class Car

{

public $make;

public $model;

public $color;

//...

}

参数初始化时设置默认值

function create($name = null)

{

$newName = $name ?: "ABC";

// ...

}

设置默认值一个比较明显的好处是,当对一个较早之前已经定义好的函数添加参数时,将新增的参数设置默认值可以省得去修改以前使用该函数的地方。

php代码常见的变量缩写,PHP代码简洁之道——变量部分相关推荐

  1. Python 工匠:善用变量来改善代码质量

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏 作者:朱雷 | 腾讯IEG高级工程师 『Python 工匠』是什么? 我一直觉得编程某种意义上是一门『手艺 ...

  2. R语言基本介绍 | 数据科学、Rstudio介绍、快捷键操作、R代码常见命令、数据类型、示例代码等等

    一.数据科学 数据科学:计算和统计技术的综合应用,用于解决一些真实世界中的问题. 计算:获得结果 统计:分析和建模 真实世界:机器学习.AI 数据科学Data Science = 统计+数据处理+机器 ...

  3. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块的加载顺序

    1. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块 在Java中,使用{}括起来的代码称为代码块,代码块可以分为以下四种: (1)普通代码块:就是类中方法的方法体 public vo ...

  4. [系统安全] 四十六.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  5. 今天你的静态变量和静态代码块执行了吗?

    摘要:今天你的静态变量和静态代码块执行了吗? 本文分享自华为云社区<[java]静态变量和静态代码块那些事>,作者: 大金(内蒙的). 今日题目: 今天你的静态变量和静态代码块执行了吗? ...

  6. 常见的变换总结与代码:DCT,STFT,K-L变换等

    文章目录 前言 一.从DFT到DCT 二.从CTFT到STFT 三.K-L变换与降维思想 四.K-L变换实例:人脸识别(含代码和详细注释) 五.参考资料 前言   之前学信号和DSP的时候,除了常见的 ...

  7. 八种常见回归算法解析及代码

    目录 一.线性回归 1.最小二乘法 -导数/偏导为0求参数 最小二乘法求解参数​优缺点 2.迭代求解参数​-梯度下降.坐标轴下降.最小角回归 2.1使用梯度下降-对回归系数中w的每个元素分别求偏导并乘 ...

  8. 常见字典用法集锦及代码详解

    目录 前言 字典的简介 1. 字典对象 1.1 Add 方法 1.2 Exists 方法 1.3 Keys 方法 1.4 Items 方法 1.5 Remove 方法 1.6 RemoveAll 方法 ...

  9. python的有效变量名_python里用变量命名改善代码质量

    编程时,总会遇到各种各样的变量,取一个好的变量名能够有效提高代码的可读性,而且python是一种,动态类型的语言,良好的变量名,能够在编写代码或者再次阅读代码时提高效率. 1. 变量名不要太宽泛,要有 ...

最新文章

  1. 关于IE6下CSS选择器失效的问题
  2. latex 无穷_《天龙3D》新资料片“骑乐无穷”即将上线
  3. HttpClient通过Post上传文件(转)
  4. [置顶]       IE与FireFox的JavaScript兼容问题
  5. 数据结构和算法———P1 绪论
  6. 旷视科技Face++进军机器人业务
  7. NWT失败反思:公司都死了,还怕得罪人
  8. 电影:美国队长:复仇者先锋
  9. 万能启动的最后的传说:UD三分区法部署教程!UD加UEFI!
  10. QT移植Linux平台
  11. 用excel制作双层饼图_excel双层饼图怎么做
  12. Win系统 - Windows10 系统恢复语言栏位置的方法(二)
  13. 冬日魔幻之旅-seata+dubbo+nacos+springboot解决分布式事务的全网段唯一实践之作(上)
  14. 开关电源-半桥LLC控制
  15. 两级交错升压 DC/DC 转换器中传导 EMI 噪声的建模和预测
  16. 代码块、if语句、if-else语句、switch语句、while循环、do-while循环、for循环——JS流程控制
  17. 深度学习常用软件纪录
  18. 1.1.5 在同一折线图中画2条曲线
  19. Fragment 与 Viewpager 联合使用在网络上获取图片
  20. 2022年广东省安全员B证第三批(项目负责人)上岗证题目及模拟考试

热门文章

  1. lstm训练情感分析的优点_LSTM对电影评论进行简单的情感分析
  2. 微信和Python之间,还能这样玩,你所不知道的骚操作!
  3. Python 绘制出酷炫的三维图
  4. MATLAB机器学习系列-5 RBF、GRNN和PNN神经网络原理及其例子代码
  5. tomcat的基本使用
  6. Java8 ArrayBlockingQueue 源码阅读
  7. VTK:图像亮度用法实战
  8. boost::mp11::mp_pop_front相关用法的测试程序
  9. boost::heap模块实现可变堆的测试程序
  10. boost::geometry::strategy::distance::pythagoras_point_box用法的测试程序