女主宣言

说实话,在代码质量方面,PHP的压力非常大。通过阅读本系列文章,您将了解如何提高PHP代码的质量。

PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!

说实话,在代码质量方面,PHP的压力非常大。通过阅读本系列文章,您将了解如何提高PHP代码的质量。

我们可以将此归咎于许多原因,但这肯定不仅仅是因为PHP生态系统缺乏适当的测试工具。在本文中,我想向您展示一个简单的设置,用于项目的基本质量测试。 我不会详述任何特定的工具,而是专注于设定测试环境。

本文中有一个演示代码可以在GitHub上找到:https://github.com/mkosiedowski/php-testing-demo 如果你对这篇文章中的例子有任何问题,可以参考。

1

必备条件

我假设您熟悉PHP 7.1语法,您可以使用Composer和PSR-4来进行自动加载和PSR-1&PSR-2的编码标准。在我的示例中,vendor的二进制文件被安装到 ./bin 目录。

2

构建工具

我们将使用一些不同的测试工具,所以最好有一些能用一个脚本来运行它们的东西。 PHING为我们提供了解决此问题的绝佳解决方案。 PHing与Apache Ant相似,可以使用XML配置轻松自动执行任务。 我们可以通过运行以下命令来安装它:

$ php composer.phar require --dev phing/phing

然后,在项目的根目录中创建一些基本的build.xml文件。

<?xml version="1.0" encoding="UTF-8"?><project name="MyProject" default="run"></project>

在接下来的步骤中,我们将添加一些由PHing运行的目标。

3

静态代码分析

我为了提高代码质量,您可以做的第一件事就是设置静态代码分析器。他们会在没有真正运行的情况下阅读你的错误代码。这就像在几秒钟内由一个机器人完成了一个代码审查一样。很酷,不是吗?

4

代码风格

当使用正确的样式编写时,您的代码更容易维护。每个人都知道(如果你不这样做,你至少应该开始阅读Robert C. Martin的“Clean Code”),但仍然有很多团队在遵守他们达成的标准方面存在问题。我们可以用phpcs - PHP代码嗅探来自动化这个任务,有没有很神奇。

我们可以通过运行以下命令来安装:

$ php composer.phar require --dev squizlabs/php_codesniffer

然后添加一个在build.xml中运行它的目标。你的build.xml现在应该是这样的:

<?xml version="1.0" encoding="UTF-8"?><project name="MyProject" default="run"><target name="phpcs" description="Check code style with PHP_CodeSniffer"><exec executable="bin/phpcs" passthru="true" checkreturn="true"><arg line="--standard=PSR1,PSR2 -extensions=php src"/></exec></target><target name="run" depends="phpcs"/></project>

现在您可以运行 ./bin/phing了,phpc将自动检查您是否在PSR-1和PSR-2编码标准上有任何错误。

许多框架,比如Symfony,定义了它们自己的代码风格规则,我们也可以自动检查这些规则。比如:如果您使用的是Symfony框架,请检查https://github.com/leaphub/phpcs-symfony2标准,以了解如何使用phpcs检查Symfony的标准。

错误格式的文件的示例输出:

MyProject > phpcs:

FILE: /home/maciej/workspace/php-testing/src/Domain/Price.php
-------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-------------------------------------------------------------------------28 | ERROR | Method name "Price::get_value" is not in camel caps format
-------------------------------------------------------------------------Time: 67ms; Memory: 6Mb

在代码评审期间,不再浪费时间检查编码标准,从现在开始,它将自动实现!

5

复制/粘贴检测器

重复的代码是不好的,每个人都知道。有时我们错误地创建了这样的代码,我们从来没有注意到它。有时我们这样做是因为我们懒惰。最好是配备一个工具,它可以在构建时提示这个问题。PHPCPD - PHP复制/粘贴检测器。

通过运行以下命令来安装它:

$ php composer.phar require --dev sebastian/phpcpd

然后将目标添加到build.xml:

<target name="phpcpd" description="Generate pmd-cpd.xml using PHPCPD"><exec executable="bin/phpcpd" passthru="true"><arg line="src"/></exec></target>...<target name="run" depends="phpcs,phpcpd"/>

在vendor目录上运行的重复代码检查的示例输出:

phpcpd 4.0.0 by Sebastian Bergmann.Found 74 clones with 2929 duplicated lines in 97 files:

- /home/maciej/workspace/php-testing/vendor/phpspec/phpspec/src/PhpSpec/Matcher/TriggerMatcher.php:81-102   /home/maciej/workspace/php-testing/vendor/phpspec/phpspec/src/PhpSpec/Matcher/TriggerMatcher.php:114-135

- /home/maciej/workspace/php-testing/vendor/squizlabs/php_codesniffer/src/Reports/Full.php:81-114 /home/maciej/workspace/php-testing/vendor/squizlabs/php_codesniffer/src/Reports/Code.php:162-195

(...)

6

想要真正深入的代码分析?

如果你从头开始你的项目,你应该看看Phan - 它是一个非常强大的代码分析器,它会让你的代码变得漂亮。在https://github.com/phan/phan上查看。安装非常简单 - 只需安装php-ast扩展(在Ubuntu中,您可以尝试运行sudo apt-get install php-ast)并运行:

$ php composer.phar require --dev phan/phan

然后创建一个配置文件 .phan/config.php 内容为:

<?phpreturn [    'target_php_version' => '7.1',    'directory_list' => [        'src',        'vendor/symfony/console',],    "exclude_analysis_directory_list" => [        'vendor/'],
];

在build.xml文件中也创建phan目标:

<target name="phan" description="Check code with phan"><exec executable="bin/phan" passthru="true" checkreturn="true"/></target>...<target name="run" depends="phpcs,phpcpd,phan"/>

现在,您可以运行您的代码分析,如果您犯了错误(例如……为类属性声明错误的phpdoc类型),您应该看到这样的消息:

MyProject > phan:

src/Domain/PriceComparator.php:17 PhanTypeMismatchProperty Assigning \Domain\PriceConverter to property but \Domain\PriceComparator::priceConverter is intsrc/Domain/PriceComparator.php:35 PhanNonClassMethodCall Call to method convert on non-class type int

Phan很神奇 - 它读取你的整个代码并对它执行多次检查,包括将phpdoc声明与实际使用变量、方法、类等进行比较,你可以查看https://github.com/phan/phan#features的所有特征列表。

总结

现在,您的项目中有三个完全自动化的工具,可以保护您的代码的质量。您所需要做的就是手动运行 ./bin/phing,或者将其附加到您的git-hook或持续集成中。您的代码将被检查编码标准、重复和正式错误。这些检查应该会导致更可靠的运行时,并且花费在代码审查上的时间更少。

HULK一线技术杂谈

由360云平台团队打造的技术分享公众号,内容涉及云计算、数据库、大数据、监控、泛前端、自动化测试等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

如何提高PHP代码的质量?第一部分 自动化工具相关推荐

  1. 如何在vscode运行php代码_如何提高 PHP 代码的质量?

    说实话,在代码质量方面,PHP 的压力非常大.通过阅读本系列文章,您将了解如何提高 PHP 代码的质量. 我们可以将此归咎于许多原因,但这肯定不仅仅是因为 PHP 生态系统缺乏适当的测试工具.在本文中 ...

  2. 如何提高安卓代码的质量和语法

    本文讲的是如何提高安卓代码的质量和语法, 在这篇文章中,我会介绍几种不同的方式,让你通过自动化工具提高你的Android代码质量,包括 Checkstyle, Findbugs,PMD, 当然,还有我 ...

  3. 如何提高PHP代码的质量?第三部分 端到端/集成测试

    女主宣言 说实话,在代码质量方面,PHP的压力非常大.通过阅读本系列文章,您将了解如何提高PHP代码的质量. PS:丰富的一线技术.多元化的表现形式,尽在"HULK一线技术杂谈", ...

  4. 如何提高PHP代码的质量?第二部分 单元测试

    女主宣言 说实话,在代码质量方面,PHP的压力非常大.通过阅读本系列文章,您将了解如何提高PHP代码的质量. PS:丰富的一线技术.多元化的表现形式,尽在"HULK一线技术杂谈", ...

  5. html搜索框代码_解放双手 | 10行Python代码实现一款网页自动化工具

    各种各样的网站在我们日常工作和学习中占据着举足轻重的地位,学习.影音娱乐.查询资料.协同办公,越来越多的任务都被迁移到浏览器. 因此,网页也蕴含着很多有价值.我们能够用得到的资源.例如,数据.歌曲.影 ...

  6. php代码质量怎么提高,如何提高PHP代码的质量?第一部分 自动化工具

    重复的代码是不好的,每个人都知道.有时我们错误地创建了这样的代码,我们从来没有注意到它.有时我们这样做是因为我们懒惰.最好是配备一个工具,它可以在构建时提示这个问题.PHPCPD - PHP复制/粘贴 ...

  7. 优秀程序员是怎样提高敲代码的效率?有这些工具就够了!

    作者 | 码农唐磊 来源 | 程序猿石头( ID:tangleithu ) Mac built-in 首先介绍的就是我觉得应该熟悉 Mac 内置的一些软件及配置. trackpad 配置 1. 启用 ...

  8. 提高 Android 代码质量的4个工具

    在这篇文章中,我将通过不同的自动化工具如CheckStyle,FindBugs,PMD以及Android Lint来介绍(如何)提高你的安卓代码质量.通过自动化的方式检查你的代码非常有用,尤其当你在一 ...

  9. 提高面试代码质量的三要素

    作者总结自己多年面试他人以及被他人面试的经验,发现应聘者可以从代码的规范性.完整性和鲁棒性三个方面提高代码的质量. 程序员在职业生涯中难免要接受编程面试.有些程序员由于平时没有养成良好的编程习惯,在面 ...

最新文章

  1. MSI failed, 不能卸载VMware
  2. SCI论文写作--中科院自动化所牛博士教你如何搞科研
  3. Ironport对邮件主题中包括特殊字符的过滤
  4. PHP buffer的机制
  5. 工业交换机故障分析的原则
  6. linux系统中如何安装qwt,linux下Qt开发环境中qwt库的安装与使用
  7. Windows phone7 开发-Zune software is not launched 【转】
  8. js实现前端根据部对象属性对对象数组进行排序
  9. 一个不错的linux学习资料下载的网址
  10. python模块:数字处理
  11. jquery学习笔记一之window.onload与$(document).ready()区别
  12. 如何解决Alreader不自动滚动
  13. HttpClient下载
  14. 组建团队--共同愿景
  15. 用计算机编纂家谱的作用,家谱的编纂几大流程?
  16. 三维空间 点线面解析
  17. VPN入门教程:基本概念、使用方法及思科模拟器实践
  18. 卷积神经网络 svm分类器_使用卷积神经网络的狗品种分类器
  19. 2016 年度消费信贷建模小结
  20. 相机快门音量大小适配

热门文章

  1. 利用资源文件实现多语言的系统
  2. Python TabError inconsistent use of tabs and spaces in indentation 错误问题描述以及解决
  3. Mybatis一级缓存、整合第三方缓存ehcache、Mybatis二级缓存
  4. Linux curl命令
  5. 分布式数据库中间件概念
  6. Verizon部署美国最大小型基站系统
  7. 《HTML5 2D游戏编程核心技术》——第2章,第2.3节使用CSS背景
  8. 决策树算法原理(下)
  9. bug--Unable to add window –token is not valid; is your activity running?
  10. Windows Phone开发(11):常用控件(下)