2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

  • 2019-11-21
  • 本文字数:2854 字

    阅读完需:约 9 分钟

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

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


说实话,在代码质量方面,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 或持续集成中。您的代码将被检查编码标准、重复和正式错误。这些检查应该会导致更可靠的运行时,并且花费在代码审查上的时间更少。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/59U18gElkJPax3_hJSTuTA


2019-11-21 23:462473

评论

发布
暂无评论
发现更多内容

教师如何规划教学与科研协同发展|北京理工大学医工交叉教学实践分享(5)

ModelWhale

AI教育 科研 北京理工大学

Mysql如何迁移数据库数据

秃头小帅oi

LazyLLM教程 | 第3讲:大模型怎么玩:用LazyLLM带你理解调用逻辑与Prompt魔法!

商汤万象开发者

使用 Apache DolphinScheduler 构建和部署大数据平台,将任务提交至 AWS 的实践经验

白鲸开源

云计算 AWS Apache DolphinScheduler 思科 EKS

从《中国开源年度报告》看中国开源力量的十年变迁中,Apache SeaTunnel 的跃迁

白鲸开源

大数据 开源 Apache SeaTunnel Apache软件基金会 OpenRank

利用NLU标签优化ASR重评分模型

qife122

语音识别 自然语言理解

从v3.1到v4.3,OceanBase稳定支撑快手PB级核心业务场景

老纪的技术唠嗑局

运维 数据库设计 OceanBase 社区版 mysql'

从数据感知到精准决策:舆情监测的全流程价值解析

沃观Wovision

舆情监测 沃观Wovision 舆情监测系统

天猫商品详情API响应数据解析

tbapi

天猫商品详情接口 天猫API 天猫数据采集 天猫商品详情api

三天接入,零重构:低代码中间件的快速集成机制全解析

星云低代码中间件

ide 低代码 企业应用 可视化编程

品牌出海的隐形风险:海外舆情监测你真的会用吗?

沃观Wovision

数据分析 出海企业 沃观Wovision 舆情监测系统

03.接口vs抽象类比较

杨充

LAS平台Vibe Data Processing:AI驱动的数据处理新范式

字节跳动数据平台

大数据 数据处理 多模态数据湖

镜舟科技受邀出席开源赋能金融创新论坛,共同推动金融行业开源技术规范发展

镜舟科技

金融创新 分析型数据库 开源治理 镜舟科技 MPP 架构

Apache DolphinScheduler DataX 数据集成:新手入门全攻略

白鲸开源

大数据 Apache DolphinScheduler 数据集成 DataX 数据调度

硅空位中心实现量子网络化的新突破

qife122

量子技术 硅空位中心

星云低代码:低代码不再是平台,而是“中间件”

星云低代码中间件

低代码 中间件 企业应用 可视化开发

技术文档 | 使用 Pulsar Functions 构建实时 AI Pipeline

AscentStream

Machine Learning pulsar

浙大“卓越中心”发布两项成果突破,为航空航天科学计算注入新动能

极客天地

WAIC2025 | 澳鹏(中国)精彩亮相2025世界人工智能大会

澳鹏Appen

世界人工智能大会 WAIC WAIC2025

这个仓库堪称造轮子的鼻祖,建议看看!

Immerse

Apache Flink:从实时数据分析到实时AI

Apache Flink

flink AI 实时计算

程序员专属秋日养生指南(Coding版),文内有秋天第一杯奶茶

Comate编码助手

程序员 文心快码 秋天的第一杯奶茶 程序员养生

JNPF 6.0 +AI,低代码开发新体验

引迈信息

深入底层:如何优雅部署 SeaTunnel 分离集群到 Kubernetes

白鲸开源

大数据 开源 Kubernetes 部署 Apache SeaTunnel

中国 Apache 项目 OpenRank 排行榜 Top 20:白鲸开源深度参与两大上榜项目

白鲸开源

开源 Apache DolphinScheduler Apache SeaTunnel 白鲸开源 Apache软件基金会

校招新人如何用文心快码让Landing期不再尴尬

Comate编码助手

职场新人 AI辅助编程 AI 代码助手 文心快码

[鸿蒙征文]钢琴和弦小工具

大展红图

鸿蒙 音乐 HarmonyOS HarmonyOS NEXT 钢琴

日均处理 PB 级数据,基于 DolphinScheduler 的离线数据治理平台实现精准血缘追踪

白鲸开源

大数据 开源 数据治理 Apache DolphinScheduler 血缘分析

如何提高PHP代码的质量?第一部分 自动化工具_文化 & 方法_360云计算_InfoQ精选文章