【千奇百怪】PHP代码质检工具PHPCS分析介绍与使用
系列文章目录
- java自定义spotbugs检测器
- PHP代码质检工具PHPCS分析介绍与使用
介绍
php的编码规范并不集中,目前业界比较流行的是使用PHP CodeSniffer进行代码检测,它包含两类脚本,phpcs 和 phpcbf(GitHub地址)
phpcs
phpcs 脚本对 PHP、JavaScript、CSS 文件定义了一系列的代码规范(通常使用官方的代码规范标准,比如 PHP 的PSR2),能够检测出不符合代码规范的代码并发出警告或报错(可设置报错等级)。
phpcbf
phpcbf 脚本能自动修正代码格式上不符合规范的部分。比如 PSR2 规范中对每一个 PHP文件的结尾都需要有一行空行,那么运行这个脚本后就能自动在结尾处加上一行空行。
支持的语言
PHP,JS,CSS
功能
内置规则MySource、PEAR、PHPCS、PSR1、PSR2、Squiz和Zend,能够检测出不符合代码规范的代码并发出警告或报错(可设置报错等级)
基于词法分析的局限性,phpcs的大部分都是检查代码的风格类问题,例如:
标签:PHP代码必须使用long <?php?>标签或short-echo <?=?>标签;它不能使用其他标签变体。
字符编码:参数%s在函数中没有用到
类:类名必须大写字母开头,类定义的左花括号 { 应另起一行
详情:https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage
原理
PHP CodeSniffer主要通过词法分析的方式将PHP源码解析成TOKEN数组,然后在TOKEN中标记出不符合代码规范的代码位置。这与编译型语言有很大区别,以Java举例,编译型语言的编译过程都是先进行词法分析、语法分析,然后才是编译。在经过语法分析之后,有一个抽象语法树(AST)的概念,算是语法分析的产出,之后的编译过程是编译器在AST基础上进行的,所以编译型语言静态分析一般是针对AST语法树进行分析。而PHP是解释型语言, 解释型语言一般会在运行的时候实时进行编译,PHP词法解析器在解析PHP语言的过程中,PHP 语言的不同部分在内部被表示为类似T_XXX 的类型,这个T_XXX的类型就叫TOKEN,也叫标识符。
PHP官网共119个标识符
简单了解一下PHP的运行过程
1.传递给php程序需要执行的文件, php程序完成基本的准备工作后启动PHP及Zend引擎, 加载注册的扩展模块。
2.初始化完成后读取脚本文件,Zend引擎对脚本文件进行词法分析,语法分析。然后编译成opcode执行。如果安装了apc之类的opcode缓存, 编译环节可能会被跳过而直接从缓存中读取opcode执行。
在编译过程中,PHP 词法分析会从输入流里边一个字符一个字符的扫描,识别出对应的词素,最后把源文件转换成为一个TOKEN序列。而结合某个TOKEN代号对应的语法以及TOKEN序列的输出,我们就能理解刚才代码词法分析后的TOKEN序列内容,并且能根据序列内容还原源代码。PHP CodeSniffer 就是基于此进行代码检测。
扩展规则
https://github.com/squizlabs/PHP_CodeSniffer/wiki/Customisable-Sniff-Properties
https://blog.csdn.net/weixin_39982236/article/details/115228905
使用
环境准备:
- php (7.0.32)
- composer (2.2.18)
tip:安装 composer的1.x版本必须要和对应的php版本匹配,调研中发现1.x版本已弃用,如果已安装的有 composer的1.x版本可使用 composer self-update 命令更新 (如果更新不到2则需要注意composer.json版本约束配置),php使用7之后,composer最新版即可
如果是首次安装composer,则需要进行全局配置 mv composer.phar /usr/local/bin/composer && chmod +x /usr/local/bin/composer && chomd -R 777 /root/.composer
安装phpcs
执行composer global require “squizlabs/php_codesniffer=*”
执行composer global config bin-dir --absolute 获取 composer 路径
根据路径设置软连接
ln -s composer路径 /phpcs /usr/local/bin/phpcs
ln -s composer路径 /phpcbf /usr/local/bin/phpcbf
执行
配置完成后命令行直接可以使用phpcs命令扫描文件
常用参数:
检查单个文件/目录:phpcs [文件/目录]
指定报告格式:phpcs =summary /path/to/code ;可用的报告格式有 emacs, source, summary, diff, svnblame, gitblame, hgblame, notifysend,默认为full
| | |
| | |
参数 | 作用 |
---|---|
-i | 显示已安装的编码标准 |
-h | 查看帮助 |
–standard | 指定标准 |
–report | 设置报告格式,可用的有full, xml, checkstyle, csv, json等 |
–report-full | 将检测结果写入文件 |
–config-show | 查看配置选项 |
–config-set | 修改配置选项 |
–report=summary | 仅显示每个文件的错误和警告数量的摘要报告 |
–no-colors | 不设置输出的颜色,默认配置 |
–cache | 缓存输出结果 |
–no-cache | 不缓存输出结果,默认配置 |
–ignore-annotations | 忽略代码注释 |
–report=info | 打印详细信息报告 |
–report=souurce | 打印源报告 |
–report=ocde | 打印代码报告 |
指定标准
参数 --standard 指定的标准有三种:内置标准,其他标准,自定义标准。
内置标准
包括MySource、PEAR、PHPCS、PSR1、PSR2、Squiz和Zend,每种标准针对的各不相同,以PSR为例,phpcs内置PSR1与PSR2,使用时可以直接 --standard=PSR1
PSR-1:基本的编码风格
PSR-2:编码风格(更严格)PSR-2中文说明
PSR-3:日志记录器接口
PSR-4:自动加载
其他标准
为依据项目需要开发的开源标准,以为 CodeIgniter 例( CodeIgniter 是一个应用开发框架和工具包,用于 PHP 开发 Web 网站,这里的CodeIgniter指的是其使用的PHP开发规范) ,想要使用 CodeIgniter 需要先去https://github.com/thomas-ernest/CodeIgniter-for-PHP_CodeSniffer 下载包解压,复制 src 目录到 php->pear->PHP->CodeSniffer→Standards 目录下,并且改名为 CodeIgniter,然后才可以使用:phpcs --standard=CodeIgniter
自定义标准
可以直接通过指定目录进行使用,–standard=D:/PHP_CodeSniffer/src/Standards/FireLine
参考资料:
Github:https://github.com/squizlabs/PHP_CodeSniffer
官方wiki: https://github.com/squizlabs/PHP_CodeSniffer/wiki
【千奇百怪】PHP代码质检工具PHPCS分析介绍与使用相关推荐
- php 代码质量检查_代码规范工具 phpcs 质量检查工具 phpmd
// 安装后 将 ~/.composer/vendor/bin/ 添加到 PATH 环境变量中,否则会报命令找不到. composer global require"squizlabs/ph ...
- python代码自检工具 flake8简单介绍
PEP 8 是 Python 代码风格规范,它规定了类似行长度.缩进.多行表达式.变量命名约定等内容.尽管你的团队自身可能也会有稍微不同于 PEP 8 的代码风格规范,但任何代码风格规范的目标都是在代 ...
- C/C++代码静态分析工具调研
简述 静态分析(static analysis)是指在不执行代码的情况下对其进行分析评估的过程,是软件质量和软件安全保障的重要一环.它通过词法分析.语义分析.控制流分析.数据流分析等技术对代码逐行解析 ...
- C/C++ 代码检测工具
valgrind:https://www.cnblogs.com/AndyStudy/p/6409287.html C/C++静态代码检查工具对比分析:http://qa.blog.163.com/b ...
- 软文推荐:常用 Java 静态代码分析工具的分析与比较
http://www.uml.org.cn/j2ee/201107114.asp 常用 Java 静态代码分析工具的分析与比较 作者:赵卓 , 发布于2011-07-11 , IBM 简介: 本文首先 ...
- coverity代码检测工具介绍_微服务测试之静态代码扫描
静态代码扫描为整个发展组织增加价值.无论您在开发组织中发挥的作用如何,静态代码扫描解决方案都具有附加价值,拥有软件开发中所需要的尖端功能,最大限度地提高质量并管理软件产品中的风险. 背景 微服务架构模 ...
- 静态代码分析工具列表分析---代码分析工具列表(30款工具)
本文是一个静态代码分析工具的清单,共有30个工具.包括4个.NET工具.2个Ada工具.7个C++工具.4个Java工具.2个JavaScript工具.1个Opa工具.2个Packaging工具.3个 ...
- 《深入分析GCC 》——第2章 GCC源代码分析工具2.1 vim+ctags代码阅读工具
本节书摘来自华章出版社<深入分析GCC >一书中的第1章,第2.1节,作者 王亚刚 ,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第2章 GCC源代码分析工 ...
- coverity代码检测工具介绍_Coverity代码扫描工具
1.说明:Coverity代码扫描工具可以扫描java,C/C++等语言,可以和jenkins联动,不过就是要收钱,jenkins上的插件可以用,免费的,适用于小的java项目 2.这是Coverit ...
最新文章
- python 乒乓球_python乒乓球
- 数字电路实验怎么接线视频讲解_家庭影院中音箱、功放、投影机、4K播放机不知道怎么连接?手把手教你...
- 物理机存放mysql实例原则_MySQL优化笔记(四)--表的设计与优化(单表、多表)...
- shell实现从1加到100
- 谁知道怎么编写侧边栏的代码吗?
- P ⊆ co-NP的原因
- Omnipeek 抓包工具
- 如何获取微信服务号用户的openID
- 点连通度与边连通度的求解
- 出了雷军周鸿祎,湖北却消失在中国互联网版图
- Mysql,姓名按笔画排序
- AR涂涂乐⭐六、 UGUI精灵格式、自动延迟截图、优化“4”、移出扫描框终止截图进程
- ct上的img表示什么_X线/CT/MR影像片子上的标识你是否都认识?
- 008 触发器实现三分频
- 鸿蒙系统网络连接设置ip,网络ip地址错误解决方法
- ios android手机传照片大小,实用:Android与iOS手机互传资料小妙招
- MTBD 电影市场分析
- cassandra实战--物化视图(Materialized View)
- 刷题笔记之十一 (计算字符串的编辑距离+微信红包+年终奖+迷宫问题+星际密码+数根)
- redis再战之AKF的Z轴拆分和代理集群搭建《八》