使用php codesniffer和mess detector
时间:6年前 阅读:6048
写代码的时候,难免会出现各种bug。为了减少bug,常用的手段有:拼写检查、code review等。
如果使用vim编辑器,在其配置文件.vimrc中增加该选项能够对拼写进行检查,一定程度上减小拼写错误:
set spell
然而代码中,很少直接用一个完整的单词做变量或者方法名。该配置对写文章等有帮助,用在写代码上作用有限。code review能够极大的降低bug,可惜需要额外的人力与时间。对于大部分程序员来说,提交之前能够diff一下查看改动的代码就已经很难得了。review适合于人员充足,对质量要求严格的团队。
有没有一种方法,能够自动检测语法、潜在bug等呢?必须是有的,否则phpstorm等卖点何来?!对于php开发来说,编写的时候就做到规范高质量的代码,需要三步:语法检测、编码规范和质量检测。
语法检测
php在执行代码之前,首先会进行语法分析。没有错误再进行编译和执行。如何检测一个php文件有没有语法错误呢?在命令行下,使用该命令:
php -l filename.php
如果有错误,该命令能够将错误详细输出来。写完代码后,使用该命令检查一下php文件有无语法问题,是一个好习惯。
php -l 只能一个个的检查文件,如何批量的检查php文件的语法问题?可以使用下列命令:
find . -name "*.php" | xargs -n 1 -P N php -l
其中-P N中的N是进程数,在多核情形下,让N>1能够提高效率。
编码规范
每个人都有自己的代码风格,这是完全没有问题的。对于团队开发,协商好规范再开发,能够保持项目编码风格的一致性。对于php开发,目前流行的开发规范主要是psr。如何知道自己写的代码是否遵循定义的规范呢?
可以使用php codesniffer这个工具。php codesniffer是pecl的一个包,安装之后利用phpcs这个可执行文件即可对违背编码规范的代码做出提示,例如:
phpcs a.php
该命名一个可能的输出为:
FILE: /var/www/nsnmf/common/models/Submission.php ---------------------------------------------------------- FOUND 0 ERRORS AND 2 WARNINGS AFFECTING 2 LINES ---------------------------------------------------------- 60 | WARNING | Line exceeds 120 characters; contains 138 characters 187 | WARNING | Line exceeds 120 characters; contains 390 characters ---------------------------------------------------------- Time: 52ms; Memory: 5.25Mb
输出内容取决于phpcs的配置。通过该命令,我们可以清晰的看到文件中编码不规范的地方并改进,使得项目的编码规范统一。
质量检测
质量检测主要是对程序中潜在的性能问题、bug等进行检测。例如定义了未使用的变量,读取未声明的变量等。语法检测使得代码能够运行,质量检测则让代码能更稳定健壮的运行。通过质量检测,可以在运行前即发现代码问题,从而提高代码的线上运行稳定率。
php可以使用mess detector来对代码进行检测。安装了mess detector之后,使用phpmd对代码进行检测:
phpmd a.php text ruleset.xml
一个可能的输出为:
$ phpmd a.php text .vim/phpmd-ruleset.xml /home/qiquanji/a.php:12 Avoid unused local variables such as '$cd'.
文件中我们使用了未定义的变量$cd,通过了语法检测,但是被质量检测发现了。
通过以上三步,能够让我们的代码风格统一,并且健壮。以下是centos下的配置和使用过程:
1. 安装
语法检测的功能php自带,无需额外安装。需要安装的是codesniffer和mess detector。
安装codesniffer
官方网站: http://pear.php.net/package/PHP_CodeSniffer/redirected
项目源代码: https://github.com/squizlabs/PHP_CodeSniffer
我们使用pear工具来安装,命令如下:
yum install php-pear pear install PHP_CodeSniffer
通过这两步,我们即可直接使用phpcs来做编码规范检测。但是此时使用的是默认配置,可以通过phpcs –config-show看到输出为空。需要自定义规则,可以将 /usr/share/pear-data/PHP_CodeSniffer文件夹下的CodeSniffer.conf.dist文件重命名为CodeSniffer.conf,并适当修改其内容以符合要求。再次运行phpcs命令,将会看到使用自定义配置后的效果。
安装mess detector
官方网站: http://phpmd.org/
mess detector的安装非常简单,直接下载下来即可:
wget -O /usr/bin/phpmd -c 'http://static.phpmd.org/php/latest/phpmd.phar'
phpmd必须指定一个ruleset。内置的有cleancode, codesize等。自定义ruleset也是非常简单,可以参考官网的教程。
通过这几步,已经搭建了一套完整的检测环境。接下来就是将这些工具运用到实践中了。
2. 使用vim syntastic
上面的过程稍微有点美中不足:每次编辑完文件,需要退出之后再一一运行命令。有没有可能这些都是自动的完成呢?
答案是肯定的。使用vim的syntastic插件,即可帮我们自动完成上述的一些列步骤!
如果你使用vundle来管理vim的插件,只需在 .vimrc 中添加下列命令:
Bundle 'scrooloose/syntastic'
然后运行 BundleInstall
即可将syntastic插件安装。接着加入一下配置到.vimrc,则上述过程将在文件保存的时候自动触发:
" syntastic conf set statusline+=%#warningmsg# set statusline+=%{SyntasticStatuslineFlag()} set statusline+=%* let g:syntastic_always_populate_loc_list = 1 let g:syntastic_auto_loc_list = 1 let g:syntastic_check_on_open = 1 let g:syntastic_check_on_wq = 0 let g:syntastic_php_phpcs_args = "--standard=~/.vim/phpcs-ruleset.xml" let g:syntastic_php_phpmd_post_args="~/.vim/phpmd-ruleset.xml"
本站声明:网站内容来源于网络,如有侵权,请联系我们https://www.qiquanji.com,我们将及时处理。
微信扫码关注
更新实时通知
网友评论