背景

在公司开发的时候,每次不管svn还是git提交代码的时候都会对代码进行简单的自动检测。检查不了代码逻辑,但是最起码能保证整体的编码格式保持一致。这个功能还是挺有用的,一直想了解下是怎么实现的,直到最近想起来才开始了解这个自动检测是怎么回事。

研究途径

  1. 一般公司的doc文档上会记录各种系统的某个功能的具体实现,而且很可能不止一个文档,在公司的doc文档上各种关键字搜索都找不到相关资料
  2. 找到对应部门的同事询问是如何实现的。同事给了答复是PHP_CodeSniffer并且告知了github链接。并且明确告知:文档?不可能的。然后加了一句,网上什么都有
  3. 最后就自己在Baidu/Google了几篇文章,差不多就了解了

实践部分

PHP_CodeSniffer的安装 参考资料

pear install PHP_CodeSniffer

我直接使用了pear方式安装,简单方便很多。使用pear安装的扩展库基本上默认在php的安装目录下,比如我的:/opt/php-7.1.9/lib/php/PHP/CodeSniffer。大家可以参考下自己的安装目录。
命令行直接使用PHP_CodeSniffer如下:

phpcs test.php

设置PHP_CodeSniffer的代码规范格式。

# /opt/php-7.1.9/lib/php/PHP/CodeSniffer/src/Standards 
# 这个目录下列出了所有可以设置的格式(PSR1,PSR2,PSR12,Zend,Squiz等)
phpcs --config-set default_standard Zend

svn/git安装

这里不展开描述了,由于我在虚拟机上安装也花了一些时间,都是参考网上的资料。

将PHP_CodeSniffer集成到git/svn中
每部署一个svn项目,都会对应的配置文件,其中有个hooks文件夹,其中有pre-commit,在这个文件中加上phpcs 的命令就好了。
git的原理是一样的,都是有个hooks的文件夹,其中都有pre-commit。
差别:我们公司svn是在commit的过程中进行的自动检测,git是在git push的时候进行检测操作的。猜想应该自动代码检测肯定是集成在工程代码所在的服务端是最好的。svn commit的时候就直接访问的远程主机。但是git commit的时候是将代码保存在本地分支,只有git push的时候才是提交到远程主机,所以git就是在git push的时候进行的自动检测操作。

写在最后

通过了解PHP代码的自动检测,发现了很多问题。

  1. 自己没有主动去思考问题,最开始的时候就是想去doc上查找资料,而不是先想想这个功能是如何做到的。再到在doc上没找到资料直接去找了同事
  2. 一直在做业务需求的时候,常常忘记了继续学习,思考其他东西。比如linux命令很多都已经忘记了,还有就是PHP_CodeSniffer这个扩展库很不错,之后有时间再研究下具体实现。需要经常思考问题
  3. 通过这次的代码自动检测发现自己什么都不懂,pear,PSR,svn/git,yum/apt-get等等很多都不懂,即使之前用过,但是没有深入研究过,也没有做对应的记录,所以很快就忘记了。看的稍微多一点就会意识到自己了解的太少太少了
  4. 感谢这个过程中使用的几个资料

参考文档
PHP_CodeSniffer安装

本文固定链接:

PHP代码自动检测(git/svn集成PHP_CodeSniffer)

http://www.js-code.com/php/php_65912.html

80%的人都看过