好的开发者通常以代码质量来定义。在软件行业,写好的代码意味着在在测试,更新,扩展或者修复漏洞中省钱。本文,我将向你展示一些现实生活中技巧和想法的例子,来帮助你清理你的逻辑代码,重构它,让它变得更健壮和模块化。这些技巧将不仅仅帮助你重构你的旧代码,而且给你一些如何从现在开始写出简洁代码的好建议。

什么是重构,为什么我们需要它?

重构是指帮助我们写简洁代码的方法和步骤。这对其他可能阅读,扩展和不需要怎么编辑来复用我们代码的其他开发者来说是很重要的。

下面的内容将向你展示一些重构逻辑代码,让它变得更好的例子。

不要在没有单元测试的情况下重构生产环境的代码

我的第一条建议是从不在没有完全进行单元测试的情况下开始重构逻辑代码。我的理由是:你将会以很难有修复的损坏的功能收尾,因为你也很难指出是哪里损坏了。因此,如果你要重构它,从测试开始。保证你准备重构的部分被测试覆盖到。PHPUnit 代码覆盖分析.

从你代码最底层开始重构

我的官方群点击进入

700粉丝福利安排PHP进阶资料,免费领取

【社群福利】30G-PHP进阶资料,助力大家都能30K

看一下下面的图片。这是一个我从 Github 找到的真实的酒店管理系统项目。这是一个开源的项目,可想闭源项目将是糟糕的。

示例:从底层开始重构

你看这个代码,这里用红色标出了三个层级。最底层应该是在第一个 if 条件下被 if/else 包围的申明。通常,最底层是集中在单一逻辑处理,比较容易重构。

让你的方法更短,分解它们到更小的方法或者配置文件 / DB 表

也许在这里,我们可以向下面一样提炼它到一个私有方法:

使你的方法更短

下一个深入点将是上传参数和加载视图。现在,再来看看在重构其他部分之后的 add() 方法。它变得更加简洁,易读,易于测试。

示例:首先重构最底层

if 申明坚持使用大括号

大多数编程语言都支持单行 if 申明,因为这样比较简单,所以一些开发就这么使用,但是这样不便于阅读,而且容易造成问题,因为一个空行就可以中断条件造成崩溃。看下下面两个示例的不同:

示例:使用大括号

别使用魔术数字或者魔术字符串:

下个示例中,你注意到如果房间超过 250 ,会返回一个错误信息。这里,250 就被认为是一个魔术数字。如果你不是写这个的开发者,很难指出这个数字表示什么。

示例:魔术数字

为了重构这个方法,我们可以指出 250 表示最大的房间数。为了替换硬编码,我们可以提取它到一个变量 $maxAvailableRooms 。现在对其他开发者来说,它变得更易被理解。

示例:修复魔术数字

不要使用 else 申明,如果你不是真的需要:

在相同的 availablerooms () 函数中,你注意到那个 if 申明, 其中我们可以很容易摆脱 else 部分,而且逻辑保持一致。

示例:忽略 else 申明

使用能够表示你的方法,变量和测试的命名

在后面的示例中,你会发现酒店管理系统有两个方法分别是 “index () ” 和 “ room_m () ”。 对我来说,我搞不清它们的目的是什么。我认为它应该很容易被理解,如果它们的命名都能够描述自己。

示例:不好的方法命名

充分利用你的编程语言的功能

许多开发者不会利用到他们使用的编程语言的全部功能。很多功能能够节约你们的的时间,而且能够让你们的代码更健壮。看下下面的示例,注意如何在更少代码情况下更容易达到相同的结果的,通过使用类型提示。

最后,我想提供一些关于更好编码的快速提示:

  • 使用新的数组形式 [] 替代旧的 array ()。

  • 除非不检查数据类型很重要,否则使用 === 操作符替代 ==。

  • 给公共方法提供简短的描述性名称总是一个好主意。私有方法可以使用更长的名称,因为它们的适用范围比较有限。

  • 仅对实现接口的方法使用通用名称例如 add (),并对单个类方法使用描述性名称例如 addUser () 或 addDocument ()。

  • 从类中删除未使用的方法。

  • 对返回值为 boolean 等的函数使用 is/has 前缀:isAdmin (user),hasPermission(user),hasPermission (user),hasPermission(user)。

  • 始终在类方法和属性中使用访问修饰符。

  • 注意接口污染:仅使用用户可以公开使用的方法。

  • 在公共方法位于顶部的位置组织类方法。

  • 始终在类中应用单一职责的概念。

转自链接:高级 PHP 工程师必备的编码技巧及思维

大厂必备面试题

PHP经典面试题集(含答案)

面试12家公司,收获9个offer,2020年PHP 面试问题

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群点击此处。
喜欢我的文章就点赞关注吧

高级PHP工程师必备的编码技巧及思维(收藏)相关推荐

  1. 高级软件工程师必备的五大技能

    具备什么样的素质的人才能成为一名高级软件工程师?作为高级软件工程师,你不仅要具备娴熟的技能,更重要的,还要具备与人合作的能力.只有能够领导和提升他人的软件工程师,才是真正的高级软件工程师.Israel ...

  2. 采购工作必备Excel实用技巧大全(收藏)

    采购工作必备Excel实用技巧大全(收藏) https://weibo.com/ttarticle/p/show?id=2309404363829730538228

  3. 高级软件测试工程师必备知识与技能

    高级软件测试工程师应该具备哪些技能和知识,今天小姐姐带你了解相关技能与知识. Linux环境搭建及命令 1.虚拟机的搭建与使用 搭建虚拟机的操作步骤 搭建虚拟机系统环境 虚拟机的基本操作与使用 2.L ...

  4. 怎么才算是高级点灯工程师?

    怎么才算是高级点灯工程师? 文章目录 怎么才算是高级点灯工程师? 一.前言 二.初级工程师 三.中级点灯工程师 四.高级点灯工程师 五.总结 一.前言 相信大家在学习嵌入式的时候,第一个工程就是点灯! ...

  5. 【资料分享】工程师必备物联网资料合集 电子书PDF

    对于许多电子工程师来说,各种电路资料,学习资料,新新技术资料等等,都有越多越好的.本篇帖子就为大家整理了一些比较受工程师欢迎的一些电路资料.如果你有心动的话,不妨就来搜集一波吧! <Deep L ...

  6. 优秀web前端工程师必备_优秀的Web工程师的技能和素质

    优秀web前端工程师必备 In this one-on-one episode of the Versioning Show, Tim and David talk about what makes ...

  7. Python研发工程师必备工具合集

    Python研发工程师必备工具合集 1.必备工具 2.常用网站 3.学习路线 4.必备技能 5.书籍推荐 6.进阶学习 一.必备工具: 1.Sublime Text 2.Notepad++ 3.Vis ...

  8. 5 个被忽视的习惯,决定了你很难成为高级开发工程师!

    整理 | 张仕影  责编 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 每个初级程序员都希望有一天能成为一名高级开发工程师. 当程序员想要转向更高需求以及更高层次的角色时,他们的能力也必须 ...

  9. android 技能标签功能_android开发工程师必备技能

    厚 学 网 android 开发工程师必备技能 android 软件开发工程师是 Android 平台发展中不可或缺的人才要素. 据介 绍,就我国目前来说, Android 研发人才缺口至少 30 万 ...

最新文章

  1. wincc里c语言long int,WinCC V7.3_C脚本手册.pdf
  2. Codeforces Round #265 (Div. 1) C. Substitutes in Number dp
  3. apache 网站跳转至同一页面(可用于当网站在备案时显示告示)
  4. centos 6 防火墙开启端口无效问题
  5. Android 最简单的MVP案例;
  6. 新IT运维时代 | Docker运维之最佳实践-上篇
  7. Atitit 知识图谱 知识抽取 信息抽取的总结艾提拉总结 目录 1. 知识抽取 1 2. 数据源主要来自两种渠道( 2 2.1. 内部结构化数据vs 外部网页数据 2 3. 2. 知识图谱的数据来
  8. 一功能简单的BBS系统源代码
  9. 51单片机红绿灯(十字路口智能控制系统)
  10. CCNA中英对照题库(285道选择题)
  11. android libyuv库的使用
  12. react兼容safari9_解决create-react-app在ie中打开页面空白的兼容性问题
  13. C. Pythagorean Triples
  14. firebug 四款插件
  15. 关于linux音频JACK的那些事情……
  16. web前端本科未拿到学位证_您是否需要计算机科学学位才能成为成功的Web开发人员...
  17. 换硬币将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
  18. LTE协议之用户面与控制面UE侧协议结构
  19. 《圣斗士星矢》的武士道精神
  20. 某校2020专硕编程题-递归逆序输出

热门文章

  1. Zynq LTE基站设计与实现
  2. python批量移动文件到指定文件夹_使用python批量将文件夹中的文件移动到某个文件夹下...
  3. 单片机的外部中断(二)
  4. Wordpress响应式Git主题/响应式CMS主题模板
  5. 50种响应式web设计的奇妙工具
  6. python excel xlwngs 受保护的视图解除方法
  7. 基于卷积神经网络的猫狗识别
  8. WPF制作贪吃蛇小游戏
  9. ZOJ2477 拼魔方
  10. mysql数据库中针对结果保留小数的问题