php质量检查工具 phpmd的使用

news2024/11/25 20:41:02

PHPMD简介

团队在使用php-cs-fixer 代码格式自动式化工具之后,在格式,代码错误等方面带来了很大便利,不过在命名,代码质量,代码复杂度,缺少一些检查,在网上搜索后,发现PHPMD 一个PHP代码静态分析工具.

安装

官方网站 github
你可以直接到下载页面封装好的 phar 包:phpmd.phar

unix:

 
  1. wget http://static.phpmd.org/php/latest/phpmd.phar -O phpmd.phar

  2. chmod a+x phpmd.phar

  3. mv phpmd.phar /usr/local/bin/phpmd.phar

windows

 
  1. 下载phpmd.phar

  2. 把phpmd.phar 放入php目录,然后把php安装目录加入系统PATH变量

composer

composer global require phpmd/phpmd

使用

 
  1. /usr/local/bin/phpmd.phar

  2. Mandatory arguments:

  3. 1) A php source code filename or directory. Can be a comma-separated string

  4. 2) A report format

  5. 3) A ruleset filename or a comma-separated string of rulesetfilenames

  6. Available formats: xml, text, html.

  7. Available rulesets: cleancode, codesize, controversial, design, naming, unusedcode.

  8. Optional arguments that may be put after the mandatory arguments:

  9. --minimumpriority: rule priority threshold; rules with lower priority than this will not be used

  10. --reportfile: send report output to a file; default to STDOUT

  11. --suffixes: comma-separated string of valid source code filename extensions, e.g. php,phtml

  12. --exclude: comma-separated string of patterns that are used to ignore directories

  13. --strict: also report those nodes with a @SuppressWarnings annotation

  14. --ignore-violations-on-exit: will exit with a zero code, even if any violations are found

发现命令行有三个参数

 
  1. # phpmd 源代码路径 报告的格式 规则列表

  2. # 源代码路径 支持

  3. 一个文件 /path/to/file

  4. 一个目录 /path/to/source

  5. # 报告的格式 支持

  6. xml:以XML格式输出;

  7. text:简单的文本格式;

  8. html:输出到单个的html;

  9. # 规则列表 支持

  10. phpmd_ruleset.xml 文件格式

  11. codesize,unusedcode,naming 单个命令集合

  12. # 附加参数

  13. --exclude - 忽略的目录,以逗号分隔多个目录。

  14. # 例子

  15. phpmd /path/to/source html ./phpmd_ruleset.xml

规则集合列表:rules

 
  1. Clean Code Rules: 强化代码整洁度的规则集。

  2. Code Size Rules: 代码尺寸规则集.

  3. Controversial Rules: 有争议的代码规则.

  4. Design Rules: 软件设计的相关问题规则集.

  5. Naming Rules: 名称太长,规则太短,等等规则集.

  6. Unused Code Rules: 找到未使用的代码的规则集.

更多规则 中文参考手册

具体实例

一般在团队开发项目中,需要根据团队规范制定不同的规则文件,所以在项目根目录添加一个 phpmd.xml 规则文件后,之后自动部署的时候会运行脚本检查项目中的php代码。 下面是phpmd.xml一个例子

 
  1. <?xml version="1.0"?>

  2. <ruleset name="customer/php"

  3. xmlns="http://pmd.sf.net/ruleset/1.0.0"

  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  5. xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"

  6. xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd"

  7. >

  8. <rule ref="rulesets/codesize.xml/TooManyFields" />

  9. <!--- 一个类中不能有太多fields字段,默认值15 -->

  10. <rule ref="rulesets/codesize.xml/NPathComplexity" />

  11. <!--- 一个方法中NPath复杂性,默认值200 -->

  12. <rule ref="rulesets/codesize.xml/ExcessiveMethodLength" />

  13. <!--- 相同的方法执行同一功能,默认值100 -->

  14. <rule ref="rulesets/codesize.xml/ExcessiveClassLength" />

  15. <!--- 一个类的最大行数,默认值1000 -->

  16. <rule ref="rulesets/codesize.xml/TooManyMethods" />

  17. <!--- 一个类的最大方法数,默认值25 -->

  18. <rule ref="rulesets/controversial.xml/CamelCaseClassName" />

  19. <!--- 以驼峰式命名类 -->

  20. <rule ref="rulesets/controversial.xml/CamelCaseParameterName" />

  21. <!--- 以驼峰式命名参数名字 -->

  22. <rule ref="rulesets/controversial.xml/CamelCaseVariableName" />

  23. <!--- 以驼峰式命名变量名字 -->

  24. <rule ref="rulesets/design.xml/DevelopmentCodeFragment" />

  25. <!-- 代码中不要有var_dump(), print_r()等这种调试输出结构 -->

  26. <rule ref="rulesets/design.xml/EvalExpression" />

  27. <!-- 代码中不要有eval()这种结构 -->

  28. <rule ref="rulesets/design.xml/GotoStatement" />

  29. <!-- 代码中不要有goto这种结构 -->

  30. <rule ref="rulesets/naming.xml/BooleanGetMethodName" />

  31. <!-- 返回值为布尔型而以'getX()'格式命名的方法改写成'isX()' 或者 'hasX()'-->

  32. <rule ref="rulesets/naming.xml/ConstantNamingConventions" />

  33. <!-- 类/接口常量必须用大写字母定义-->

  34. <rule ref="rulesets/unusedcode.xml/UnusedLocalVariable" />

  35. <!-- 存在已声明或赋值的局部变量,但是却未使用-->

  36. <rule ref="rulesets/unusedcode.xml/UnusedPrivateField" />

  37. <!-- 存在已声明或赋值的局部变量,但是却未使用-->

  38. </ruleset>

phpmd.phar ./application html ./phpmd.xml --exclude application/cache,vendor > phpmd.html

编辑器插件

参考文档

PHPMD官网
phpmd中文手册
面向对象5个基本原则 phpmd-extension

转载于:https://my.oschina.net/2688/blog/909269

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/666051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云原生数据库受到青睐,亚马逊云科技数据库提供多项功能

小小的改变&#xff0c;标志一个新时代的全面开启&#xff0c;一个数据库的云原生时代。前不久&#xff0c;Gartner公布了一组数据&#xff0c;引起了不小的讨论度。在2022年全球数据库管理系统的市场份额排名中&#xff0c;作为纯云厂商的亚马逊云科技&#xff0c;超越了老牌传…

一种基于目标的可解释的自动驾驶预测和规划策略

摘要&#xff1a; 本文介绍了一种通过理性逆向规划进行目标识别和多模态轨迹预测的方法。通过将目标识别与MCTS 计划相结合&#xff0c;为自车生成优化计划。 最近炒得比较火的影子模式实际就是在通过数据收集的方式不断模拟自动驾驶系统按照人类驾驶习惯实现人之间的交互过程…

QML 快速上手3 - QuickControl2

目录 QuickControl2简介风格设置control 配置文件图像浏览器案例component 组件报错问题StackViewSwipeView QuickControl2 简介 quickcontrol 用于快速构建风格化的用户界面 它包括了以下几个预制的组件风格 Default QT 默认风格Universal windows 桌面风格Material 谷歌推…

【FPGA】译码器、计数器及数码管显示

写在前面 万万没想到最后去了FPGA岗位&#xff0c;但是FPGA只在研一学过&#xff0c;确实忘得差不多了&#xff0c;因此从头把东西过亿边 这是某本书上的第一章节&#xff0c;感觉写的还是挺不错的&#xff0c;大概看了一下让我回想起很多知识&#xff0c;个人感觉比较适合学习…

《effective java》中关于解决构造函数/方法签名包含大量参数的解决方法

针对构造方法 重叠构造器模式 重叠构造器模式是一种编程中的反模式&#xff0c;指的是一个类有多个构造函数&#xff0c;每个构造函数都有不同数量的参数&#xff0c;从而可以根据不同的情况创建对象。这种方式会导致代码可读性和可维护性降低&#xff0c;因为构造函数过多&…

echarts柱状图数据太多设置滚动条

当你的项目中因数据量太大&#xff0c;导致柱状图数据全部叠在一起不便于看的时候&#xff0c;你们是怎么处理的&#xff1f; 大部分同学可能第一想法就是裁剪一部分数据&#xff0c;仅展示页面最大限度能够展示的数据&#xff0c;这确实是一个好办法&#xff0c;简单快速。但…

【分布式】分布式存储架构

文章目录 一、集中存储结构二、分布式存储2.1 、分布式存储的兴起2.2 、分布式存储的重要性2.3 、分布式存储的种类和比较 三、分布式理论浅析3.1 、一致性和可用性3.2 、数据分布哈希分布&#xff08; Swift &#xff09;顺序分布&#xff08; Bigtable &#xff09;CRUSH 分布…

模版方法模式在 JDK 及 spring 源码中的引用

模版方法模式 模板方法模式是一种行为设计模式&#xff0c; 它在超类中定义了一个算法的框架&#xff0c; 允许子类在不修改结构的情况下重写算法的特定步骤。 更多有关于模版方法模式的介绍详见&#xff1a;https://refactoringguru.cn/design-patterns/template-method 模版…

【4】tf实现神经网络模型

1 M-P神经元与神经网络前向传输 1.1 训练单个神经元 一个含有两个输入的神经元&#xff0c;指定一个输入x1x21,期望y能输出0.3。要求不断的输入x1x21,然后不断的训练权重w与偏置b值&#xff0c;训练一万次后&#xff0c;再次输入x1与x2输出y的值是否为0.3 # 导入TensorFlow库…

Linux 进程的睡眠和唤醒详解

概要 在Linux中&#xff0c;仅等待CPU时间的进程称为就绪进程&#xff0c;它们被放置在一个运行队列中&#xff0c;一个就绪进程的状 态标志位为 TASK_RUNNING。一旦一个运行中的进程时间片用完&#xff0c; Linux 内核的调度器会剥夺这个进程对CPU的控制权&#xff0c;并且从…

QGIS实现tiff影像栅格数据切片教程

实现栅格切片的方式有很多种,geoserver可以,qgis可以。自己写代码也可以,方式非常多。这篇文章介绍一下如何使用QGIS实现栅格切片。 首先我们要去下载一个qgis软件。下载地址如下: Welcome to the QGIS project! 随后我们打开软件,然后把要切片的栅格数据(tiff文件或者…

【Python 随练】逆序打印数字

题目&#xff1a; 给一个不多于 5 位的正整数&#xff0c;要求&#xff1a; 一、求它是几位数&#xff0c; 二、逆序打印出各位数字。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个关于正整数的问题。根据题目要求&#xff0c;我们需要判断给定的正整数是几位数…

你的仓库VS别人家的仓库,有什么不同?

导读&#xff1a; 近年来&#xff0c;随着新技术的蓬勃发展&#xff0c;企业的仓储管理水平大大提高&#xff0c;PDA、RFID、AGV、立体仓库、智能分拣线等各项新技术的应用层出不穷。然而&#xff0c;着眼于制造型企业&#xff0c;却发现仍有许多仓库处在比较原始、传统、粗放…

[译] DeepSpeed:所有人都能用的超大规模模型训练工具

我们于今年 2 月份发布了 DeepSpeed。这是一个开源深度学习训练优化库&#xff0c;其中包含的一个新的显存优化技术—— ZeRO&#xff08;零冗余优化器&#xff09;&#xff0c;通过扩大规模&#xff0c;提升速度&#xff0c;控制成本&#xff0c;提升可用性&#xff0c;极大地…

如何绘制甘特图?这个软件来帮你

最好用的甘特图软件是什么&#xff1f;先看效果&#xff0c;再放教程&#xff1a; 这是大家用的比较多的excel做出的甘特图&#xff1a; 这是我做的动态甘特图&#xff1a; 两种方法&#xff0c;分享给大家&#xff0c;按需选择即可。 第一种&#xff1a;用Excel制作甘特图 用…

nx安装cuda与cudnn

本文参考 Jetson xavier nx 安装CUDA10.2&#xff0c;和cudnn8.0_jetson安装cuda_三羊木木的博客-CSDN博客 NX安装cuda和cudnn_nx cuda_viatea的博客-CSDN博客 进入nx系统后&#xff0c;输入 sudo apt-get update 更新源 目录 1 cuda 2 cudnn 1 cuda sudo apt-get ins…

如何注册GitHub账号

一、注册GitHub账号 1、浏览器URL中输入地址: https://github.com/ 2、跳转至GitHub官网 3、点击右上角sign up按钮 4、填写注册信息 这个大意是产品更新时消息会通过邮箱发给你&#xff0c;根据需求选择y or n 5、验证账户 有的小伙伴会出现错误信息 Unable to verify you…

考研算法28天:优化版插入排序(折半插入排序)【二分,插入排序】

算法介绍 算法介绍就是说我们原先写的插入排序的这段代码 for(int i1;i<n;i){//开始向前遍历&#xff0c;如果发现前面的元素比//x大的话&#xff0c;就将前面的元素放到x的后面int x q[i],ji;while( j && q[j-1]>x ){q[j] q[j-1];j--;}q[j] x;}我们里面那层…

Redis_6.2.12下载及安装(CentOS7)

文章目录 Redis安装-CentOS71、下载地址2、下载安装流程2.1 安装依赖2.2 官网下载tar包2.3 进入解压目录并编译2.4 启动Redis服务2.5 全局使用redis-cli、redis-server2.6 防火墙开启6379端口查看防火墙状态以及启动、关闭配置firewalld-cmd开启防火墙端口 3、设置开机自动启动…

SpringBoot集成百度人脸识别

SpringBoot集成百度人脸识别 1、概述2、账号申请账号登录注册创建应用 3、抽取模板工具AipFacePropertiesAipFaceTemplateapplication.yml 4、测试 ​ 人脸识别&#xff08;Face Recognition&#xff09;基于图像或视频中的人脸检测、分析和比对技术&#xff0c;提供对您已获授…