高级 PHP 工程师必备的编码技巧及思惟

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

个人官方群点击此处html

什么是重构,为何咱们须要它?

重构是指帮组咱们写简洁代码的方法和步骤。这对其余可能阅读,扩展和不须要怎么编辑来复用咱们代码的其余开发者来讲是很重要的。laravel

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


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

个人第一条建议是从不在没有彻底进行单元测试的状况下开始重构逻辑代码。个人理由是:你将会以很难有修复的损坏的功能收尾,由于你也很难指出是哪里损坏了。所以,若是你要重构它,从测试开始。保证你准备重构的部分被测试覆盖到。PHPUnit 代码覆盖分析.shell


从你代码最底层开始重构

看一下下面的图片。这是一个我从 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)。
  • 始终在类方法和属性中使用访问修饰符。
  • 注意接口污染:仅使用用户能够公开使用的方法。
  • 在公共方法位于顶部的位置组织类方法。
  • 始终在类中应用单一职责的概念。
  • 以上内容但愿帮助到你们,不少PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提高,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货须要的能够免费分享给你们,须要的能够加入个人官方群点击此处。 
相关文章
相关标签/搜索