本文旨在确认PHPLint、PHP-CS-Fixer和PHP_CodeSniffer的区别,根据当前公司的需求进行选择,编写一个简单的自定义规则。Lint工具分析PHPLint是三者中我唯一用过的Lint工具,另外两个是PHP领域比较知名的自动语法规范或者静态错误定位工具。每个工具在安装运行的基础上分三个部分进行测试:显示错误、自动修复(如果有此功能)、某行代码跳过特定的检测切换规则集。关闭规则。编写自定义规则。参考开源社区的活跃度,本次的主要探索点也会在后两者上。PHP-CS-Fixer环境声明PHP7.4是它需要的最低版本。提醒一句:确保你的PHP至少是LTS版本,否则会丢失后续的安全补丁。支持多种安装方式:PHAR、Composer等。通过composer安装需要friendsofphp/php-cs-fixer,然后运行:vendor/bin/php-cs-fixerfixsome_path。如果是全局安装,则不需要调用vendor目录下的可执行文件,但要考虑规范是否是全局的,否则还是写一个Shell比较合适。显示错误并自动修复它们。以我写的LaravelDemo为例:vendor/bin/php-cs-fixerfixapp/Http/,成功转换了我的if(expression)once_line_code,没有任何问题。使用vendor/bin/php-cs-fixerfixapp/Http--dry-run--diff,这样文件不会被修改,可以得到检测结果的具体问题和修改建议。一行代码跳过特定检测基于Issue4512,目前不支持。切换规则集通过/.php-cs-fixer.dist.php,你可以很方便的定义自己的配置文件——包含具体规则的变化,规则集,需要检查的文件目录,需要检查的目录等。简单尝试:更换为PSR12并启用不安全修复模式,没问题。禁用某条规则,本工具默认使用最小规则,所以如果配置文件中没有包含,则可以放弃对相应规则的检测。CI官方提供了相应的命令,可以让你高效的融入到CI的构建过程中。编写自定义规则尝试添加App/test_rule规则。优点是:容易写,在接口约束的前提下,基本写成一个可读的函数;灵活的规则存储,规则类可以直接放在任何项目路径下——如果你愿意,你也可以写一个包来隔离它;参考性强,虽然缺少足够的自定义规则编写指南,但可以轻松找到所有的规则类,阅读、理解、编程,良性循环。基本遵循\PhpCsFixer\Fixer\FixerInterface接口,更多的可以参考文档。PHP_CodeSniffer环境声明PHP5.4是它需要的最低版本,但某些规则需要支持更高版本的PHP。与CS-Fixer类似,它也提供了多种安装方式,一如往常:composerrequire"squizlabs/php_codesniffer=*"显示错误并自动修复。以我写的LaravelDemo为例:./vendor/bin/phpcsapp/Http/.显示密密麻麻的错误提示:Line|级别|信息。好吧,它闻起来像PHPLint。它的工具之一:phpcbf允许您自动修复发现的问题——如果它可以自动修复的话。如果我们要访问CI,PHPCS提供了相应的Action,你可以集成到构建过程中。某行代码跳过具体检测CS提供了跳过文件,跳过某行,暂时关闭,甚至下一行不检测某条规则。简单测试了上面,比如通过//phpcs:ignore,可以跳过某行检测,从文档中可以找到更多更详细的解释。Togglerulesets通过.phpcs.xml或类似的(它实际上支持几种不同的名称...),我们可以定义配置:
