千奇百怪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
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfecak
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01