本文来自medium----原文链接; 欢迎作客我们的php&Laravel学习群:109256050
你需要开始使用测试
这是我每天对自己说的话。像很多人一样,我不会像TDD所建议的那样测试我的代码。我现在在使用测试,在过去的半年里一直这样做,前面还有很长的路要走。
我是在处理复杂的遗留项目时决定学习测试。代码是如此的脆弱和僵硬,以至于一旦我们添加一些代码就会破坏它。新的特征?实现和破坏某事!修复错误?新建另一个。
这是一个大问题,并让我开始尝试测试。
第一个工具是PHPUnit。如官方网站所述
PHPUnit是PHP的面向程序员的测试框架。这是单元测试框架xUnit架构实例。
所以,PHPUnit是帮助您创建您的项目的测试框架,单元测试。它提供了几个函数来测试代码的结果,并生成与这些测试结果相同的良好输出。
自从我开始思考测试、阅读、和于人交谈测试,我发现了另一个伟大的工具,它是对以前那些单元的测试工作的补充,它就是Behat,这是一个BDD的PHP框架。
BDD(行为驱动开发)是一个来自TDD(测试驱动开发)的开发过程。这些缩写词现在并不重要,重要的是你可以使用更自然的语言来说明你的测试,这种语言对于非技术人员也可以理解它。
这种语言被称为Gherkin,是用来描述被测试的预期的行为。使用Gherkin看起来像这样
在这些描述背后,每当描述于phpDoc中的指定的方法有正则模式匹配相应的php代码就会被调用,通过SDK、应用程序或Web系统,这些代码实现了这些步骤,模拟真实的用户将做的
使用Behat工作是如此顺利。在一切正确配置之后,您开始编写测试一个特性的所有可能场景。一旦你运行behat,它给你所有你应该添加到您的PHP环境类的方法模版以便实施场景的每一步
之后,您开始编写每一步的实际代码,并继续重复这个循环。
- 实现一个步骤的php代码
- 运行测试
- 如果运行正常,继续实现下一步的php代码
- 如果有异常,修复它
在经历一个半小时的配置和阅读文档后,你可以开始使用Behat,到最后你看到的都是php代码然后你就已经知道了怎么编写它
持续集成
持续集成(CI)是一个过程——一种做某事的方法,而这一点对于我们的软件工程师来说,就是创造软件。
简单地说,它是将小代码块(也许每天几次)不断的整合到代码库中的行为。代码将被测试并且没有异常。CI帮助您自动化应用程序的构建、测试和部署。
通过几次点击,你可以通过Travis CI集成你的GitHub项目,每次推送到仓库后会运行你以写好的PHPUnit和Behat测试,这些测试告诉你最后实现的特点是否准备好,是否要合并。除此之外,您还可以使用Travis CI将代码部署到生产环境和暂存。
通过一个被良好规范的程序实现一个良好的工作流程是极好的,Travis CI可以帮助你做这项工作。遵循这个好的开始,发现对软件开发过程的思考是多么有趣,而不仅仅是代码本身。
遵循PSR-1 和 PSR-2
如果你以前不知道PSR是什么,那么现在你应该去了解了。实际上PSR代表PHP Standard Recommendation(PHP规范推荐),PHP-FIG建议使用它们。PHP—FIG是一个成员来自最大的PHP项目、框架和CMS系统的一个组织,它致力于对语言的未来、生态系统的思考和讨论应被遵循的PHP规范
很长一段时间以来PHP都没有编码风格。我没有那么老,但每次我看到别人的项目或库时,它们的风格都不同。有时把括号放在一个位置,有时把它放在下一行,用不同的方法来处理长长的一行代码,还有其他风格和喜好的组合。真是一团糟。
PHP—FIG做许多其他的工作,但提出一个统一的代码,他们说:“让我们停止操心代码风格,让我们每个人都遵循同一个标准,并开始思考创造伟大的软件”。现在,每当你查看某人的代码时,你只会操心它是如何工作的,而不是研究格式、结构。
在文章的最后,一共有9种被接受的PSRs为解决常见问题的推荐解决方案。但如果你不知道这些标准的话,以PSR-1和psr-2作为起点。
这些标准提出了现代PHP编码风格。请务必在开始使用之前阅读它们。不要认为在编写代码时你会记住所有的代码,这是一个过程,但为了让你确定你使用的规范,有一些工具可以帮助你完成它。
PHP CodeSniffer是一种工具,你可以在Packagist上找到它,使用Composer安装它。我不认为这个库名称是最好的选择,因为它包含两种不同的工具,分别是phpcbf PHPCs。
Phpcs代码嗅探器,它会扫描你的整个代码,查找与配置的编码标准不符的代码部分。
您可以通过PHPCs使用多种编码标准你甚至可以创建你自己的标准。在代码扫描结束,PHPCs列出不遵循标准的代码片段。真是太好用了。
现在,如何修改所有的错误的代码片段?你可以打开所有的文件,更改代码,运行PHPCs直到看到错误不显示出来,并重复上述过程。这样会很无聊。
为了解决这一问题,PHPcodesniffer的一个称为phpcbf的工具发挥作用了,或成为PHP代码美化工具。它在不破坏你的代码的前提下尽力修复所有的错误使之符合相同的代码规范。
试着养成习惯,在push你的代码到你的仓库之前使用phpcs和phpcbf检查代码,这将保证你所写的代码都符合规范,一旦有人喜欢你的项目并想贡献时,他们阅读起代码来毫无问题。
框架
我不想花太多的时间讨论框架,下面有一个好的框架,各有优缺点,就我而言,我不喜欢使用这些封装来所有东西的大框架。我喜欢需要什么就使用什么。
如果你需要一个HTTP 客户端,比如Guzzle。如果你需要你个模版引擎比如Twig。如果你需要一个路由器。找到适合你的组建并使用他们,将他们组合起来构建你自己的应用。
Symfony为这个概念做了很多,你可以使用这整个框架作为一个项目,也可以像上面所述使用任何你需要的组建。
然而,每当我需要使用框架来写应用,我通常会选择微型框架。它们真的很小,近提供最基础的组件,并且十分的容易定制。
我的微型框架选择是Slimframework,我认为大家都应该去试试它。
顺便提一下,对于刚学编程的人来说,我真的建议在采用框架和使用前,你应该试着建立一个你自己的框架。这将让你对这整个的工作机制有个整体的了解。并让你在以后采用大型框架时更容易理解。
现代PHP工具
让我们以一组链接表来结束这篇文章,对于我来说,这些组件和工具和库就代表来现代PHP的伟大思想:
- Slimframework:一个既好又酷的微型框架
- Symfony : 一个拥有伟大和可复用组件的大一点的框架
- Guzzle : 一个简单和好用HTTP客户端
- Behat : 一个行为驱动开发框架
- PHPCS/CBF : 代码检查和美化
- Faker : 虚拟数据生成器
- Psysh:充满极好的功能的即时开发控制台
- Composer : 依赖管理和其他的一些有用的特色
- Packagist : 第三方库仓库
- Twig : 模版引擎
我知道这个标题确实很自负,在这里我真正想说的是PHP正在进步,它的生态系统同样也在进步(可能更快)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。