V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pilishen
V2EX  ›  推广

这就是现代 PHP 该有的样子(二)

  •  
  •   pilishen · 2018-04-13 22:21:14 +08:00 · 2088 次点击
    这是一个创建于 2206 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文来自 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 正在进步,它的生态系统同样也在进步(可能更快)。

    3 条回复    2018-04-14 11:19:14 +08:00
    zerozzp
        1
    zerozzp  
       2018-04-14 01:12:00 +08:00 via Android
    PHP 的生态确实变得越来越好,不过似乎来得有点晚?
    askfilm
        2
    askfilm  
       2018-04-14 09:06:17 +08:00
    @zerozzp 晚个毛, 你自己太搓,眼界太窄,php 生态一直都非常好(国内被些垃圾框架搞的相对差很多); symfony 07 年就有了,一直促成 psr 发展, Symfony 用伟大来形容确实不为过
    wdhwg001
        3
    wdhwg001  
       2018-04-14 11:19:14 +08:00 via iPhone
    说得好,什么时候改函数名?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1171 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:32 · PVG 07:32 · LAX 16:32 · JFK 19:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.