浅谈如何提高PHP代码的质量


Posted in PHP onMay 28, 2021

概述

我们可以将此归咎于许多原因,但这肯定不仅仅是因为 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 或持续集成中。您的代码将被检查编码标准、重复和正式错误。这些检查应该会导致更可靠的运行时,并且花费在代码审查上的时间更少。

以上就是浅谈如何提高PHP代码的质量的详细内容,更多关于如何提高PHP代码的质量的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
人尽可用的Windows技巧小贴士之下篇
Mar 22 PHP
php文件怎么打开 如何执行php文件
Dec 21 PHP
浅谈php冒泡排序
Dec 30 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
Feb 26 PHP
header与缓冲区之间的深层次分析
Jul 30 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
Mar 31 PHP
PDO::beginTransaction讲解
Jan 27 PHP
PHP应用跨时区功能的实现方法
Mar 21 PHP
详解thinkphp的Auth类认证
May 28 #PHP
如何理解PHP核心特性命名空间
May 28 #PHP
如何用Laravel包含你自己的帮助函数
May 27 #PHP
详解Laravel框架的依赖注入功能
May 27 #PHP
详解PHP Swoole与TCP三次握手
May 27 #PHP
如何用PHP实现分布算法之一致性哈希算法
如何用PHP实现多线程编程
May 26 #PHP
You might like
注意!PHP 7中不要做的10件事
2016/09/18 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
在windows下Python打印彩色字体的方法
2018/05/15 Python
使用python3构建文件传输的方法
2019/02/13 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
pycharm通过anaconda安装pyqt5的教程
2020/03/24 Python
Python sql注入 过滤字符串的非法字符实例
2020/04/03 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
django有哪些好处和优点
2020/09/01 Python
css3实现背景颜色渐变让图片不再是唯一的实现方式
2012/12/18 HTML / CSS
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
Bibloo匈牙利:女装、男装、童装及鞋子和配饰
2019/04/14 全球购物
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
工程造价专业大学生自荐信
2013/10/01 职场文书
机电专业毕业生求职信
2013/10/27 职场文书
自动化专业个人求职信范文
2013/11/29 职场文书
高中军训感言1000字
2014/03/01 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
代理词怎么写
2015/05/25 职场文书
生日宴会家属答谢词
2015/09/29 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书