PHP代码重构要领漫谈
副问题[/!--empirenews.page--]
本文实例说明白PHP代码重构要领。分享给各人供各人参考,详细如下: 跟着 PHP 从一种简朴的剧本说话转变为一种成熟的编程说话,一个典范的 PHP 应用措施的代码库的伟大性也随之增大。为了节制对这些应用措施的支持和维护,我们可以行使各类测试器材来自动化该流程。个中一种是单位测试,它应承您直接测试所编写代码的正确性。然而,凡是遗留代码库是不得当举办这种测试的。本文将先容对包括常见题目的 PHP 代码的重构计策,以便简化行使风行的单位测试器材举办测试的进程,同时镌汰改造代码库的依靠性。 简介 回首 PHP 的成长过程,我们发明它已经从一个简朴的用来更换其时风行的 CGI 剧本的动态剧本说话酿成一种成熟的当代编程说话。 跟着代码库的增添,手动测试已经酿成不行能完成的使命,无论是大是小,全部代码的变革城市对整个应用措施发生影响。这些影响也许小到只是影响某个页面的加 载或表单生涯,也也许是发生难以检测的题目,可能发生只在特定前提下才会呈现的错误。乃至,它也许会使早年修复的题目从头呈此刻应用措施中。为此开拓了许 多测试器材来办理这些题目。 个中一种风行的要领是所谓的成果或验收测试,它会通过应用措施的典范用户交互来测试这个应用措施。这是一种 很得当测试应用措施中各个历程的要领,可是测试进程也许很是慢,并且一样平常无法测试底层的类和要领是否按要求正常事变。这时,我们必要行使另一种测试要领, 那就是单位测试。单位测试的方针是测试应用措施底层代码的成果,担保它们执行后发生正确的功效。凡是,这些 “不绝增大” 的 Web 应用措施会逐步呈现越来越多久而久之难以测试的遗留代码,这使开拓团队很难担保应用措施测试的包围率。这凡是被称为 “不行测试代码”。此刻让我们看看怎样辨认应用措施中的不行测试代码,以及修复这些代码的要领。 辨认不行测试的代码 关于代码库不行测试性的题目域凡是在编写代码时是不明明的。当编写 PHP 应用措施代码时,人们倾向于凭证 Web 哀求的流程来编写代码,这凡是就是在应用措施计划时回收一种越发流程化的要领。急于完成项目或快速修复应用措施都也许促使开拓职员 “走捷径”,以便快速完成编码。早年,编写不妥可能紊乱的代码也许会加重应用措施中的不行测试性题目,由于开拓职员凡是会举办风险最小的修复,纵然它也许发生后续的支持题目。这些题目域都是无法通过一样平常的单位测试发明的。 依靠全局状态的函数 全局变量在 PHP 应用措施中很利便。它们应承您在应用措施中初始化一些变量或工具,然后在应用措施的其他位置行使。然而,这种机动性是有价钱的,太过行使全局变量是不行测试代码的一个通病。我们可以在 清单 1中看到这种环境。 清单 1. 依靠于全局状态的函数这些全局变量带来了两个差异的题目。第一个题目是您必要在测试中思量全部这些全局变量,担保给它们配置了函数可接管的有用值。第二个题目更为严峻, 那就是您无法修改后续测试的状态并使它们的功效无效,您必要担保将全局状态重置为测试运行之前的状态。PHPUnit 有一些器材可以帮您备份全局变量并在测试运行后规复它们的值,这些器材可以或许辅佐办理这个题目。然而,更好的要领是使测试类可以或许直接给要领传入这些全局变量的值。清单 2表现了回收这种要领的一个例子。 清单 2. 修改这个函数以支持重写全局变量这样做不只使代码变得更具可测试性,并且也使它不依靠于要领的全局变量。这使得我们可以或许对代码举办重构,不再行使全局变量。 无法重置的单一实例 单一实例指的是旨在让应用措施中一次只存在一个实例的类。它们是应用措施顶用于全局工具的一种常见模式,如数据库毗连和设置配置。它们凡是被以为是应用措施的禁忌, 由于很多开拓职员以为建设一个老是可用的工具用处不大,因此他们并不太留意这一点。这个题目首要源于单一实例的太过行使,由于它会造成大量不行扩展的所谓 god objects 的呈现。可是从测试的角度看,最大的题目是它们凡是是不行变动的。清单 3就是这样一个例子。 清单 3. 我们要测试的 Singleton 工具您可以看到,当单一实例初次实例化之后,每次挪用 getInstance() 要领现实上返回的都是统一个工具,它不会建设新的工具,假如我们对这个工具举办修改,那么就也许造成很严峻的题目。最简朴的办理方案就是给工具增进一个 reset 要领。清单 4 表现的就是这样一个例子。 清单 4. 增进了 reset 要领的 Singleton 工具此刻,我们可以在每次测试之前挪用 reset 要领,担保我们在每次测试进程中城市先执行 singleton 工具的初始化代码。总之,在应用措施中增进这个要领是很有效的,由于我们此刻可以轻松地修改单一实例。 行使类结构函数 举办单位测试的一个精采做法是只测试必要测试的代码,停止建设不须要的工具和变量。您建设的每一个工具和变量都必要在测试之后删除。这对付文件和数据库表等 贫困的项目来说成为一个题目,由于在这些环境下,假如您必要修改状态,那么您必需更警惕地在测试完成之后举办一些整理操纵。僵持这一法则的最大障碍在于对 象自己的结构函数,它执行的全部操纵都是与测试无关的。清单 5 就是这样一个例子。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |