PHP 系列:代码规范之 Mess Detector

之前写了一篇 《PHP 系列:代码规范之 Code Sniffer》,介绍了 phpcs 和 phpcbf 这两个检测脚本,今天让我们欢迎新成员 phpmd ~ :clap: :clap:

PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD. PHPMD can be seen as an user friendly and easy to configure frontend for the raw metrics measured by PHP Depend.

phpmd

它的作用主要是分析我们写的代码,然后指出其中潜在的问题。举个栗子,大家都知道 IDE 中,如果一个变量声明了但未使用过,IDE 会报出警告。

其实使用的也是这类静态检测脚本,对于编写良好的代码,这些工具能较好的帮到你。自从弃了 PHPStorm 后,一直在 Sublime Text 上敲,既然默认不集成这些,那就自己手动集成咯~

安装

还是使用 composer,使用全局安装方式:

composer global require "phpmd/phpmd"

图方便加个软连接:

sudo ln -s /Users/stephen/.composer/vendor/phpmd/phpmd/src/bin/phpmd /usr/bin/phpmd

命令行使用

$ phpmd /path/to/ text unusedcode

/path/to/test.php:25    Avoid unused local variables such as '$a'.
/path/to/test.php:26    Avoid unused local variables such as '$b'.

这里使用了 text 格式的输出,默认是 xml,像这样:

<?xml version="1.0" encoding="UTF-8" ?>
<pmd version="@project.version@" timestamp="2017-09-22T01:33:16+00:00">
  <file name="/path/to/test.php">
    <violation beginline="25" endline="25" rule="UnusedLocalVariable" ruleset="Unused Code Rules" externalInfoUrl="http://phpmd.org/rules/unusedcode.html#unusedlocalvariable" priority="3">
      Avoid unused local variables such as '$a'.
    </violation>
    <violation beginline="26" endline="26" rule="UnusedLocalVariable" ruleset="Unused Code Rules" externalInfoUrl="http://phpmd.org/rules/unusedcode.html#unusedlocalvariable" priority="3">
      Avoid unused local variables such as '$b'.
    </violation>
  </file>
</pmd>

然后你会发现使用 text 格式会简明扼要很多 :see_no_evil: 。。。

上面这个例子只使用了一个规则 unusedcode,官方提供了六个规则,能满足绝大部分的需求: cleancode, codesize, controversial, design, naming, unusedcode

具体这些规则检测的是哪些方面,去看下官方文档是最好的,传送门

在 Sublime 中集成

安装插件

前提 Package Control 要安装好,这个你肯定没问题的(莫名的自信,逃 :runner:)

安装 phpcs 这个插件,然后打开这个插件的 Settings - UserSettings - Default,将后者的内容全部复制到前者。

配置

将以下配置项替换掉:

{
    "phpmd_run": true,

    "phpmd_command_on_save": true,

    "phpmd_executable_path": "phpmd",

    "phpmd_additional_args": {
        "codesize,controversial,design,naming,unusedcode": ""
    },
}

这边有几个注意点:

  1. "codesize,controversial,design,naming,unusedcode" 这里的逗号后面不能加空格
  2. cleancode 没有加上是因为一旦你使用了类静态方法调用,这个规则就会提醒你不要用。。。比如你在用 Laravel,然后你就炸了,虽然多用静态方法会增加不少运行时内存,但 Laravel 的静态方法是伪静态,都会实例化,所以先暂时舍弃这个规则了,之后自己写一个规则把其他好用的检测方法包含进来就好。

在配置的过程中建议全程开着 Sublime 的控制台(Ctrl + ~ 唤起)。

比如我将 "codesize,controversial" 改成 "codesize, controversial",加了个逗号,然后再使用的时候,控制台里会报出错误:

[Phpcs] Cannot find specified rule-set " controversial".

本文参考链接:

本作品采用《CC 协议》,转载必须注明作者和本文链接
公众号:编程之谜
本帖由系统于 6年前 自动加精
imxfly
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 8

为什么弃了 PhpStorm?

6年前 评论
imxfly

个人比较狭隘的看法:类似JS、PHP、Python这些弱类型语言,对IDE的依赖性相比于Java这些强类型语言要弱得多,诚然,IDE集成了许多非常有用的插件和工具,好好利用这些插件能提高不少效率。但是,打个可能不太恰当的比喻吧,就像使用Windows的用户简直无法理解那些使用Linux的用户一样,高度可定制化以及本身的有趣性,让我更愿意去使用 Editor。

就像前段时间看的 Linus 的自传《只是为了好玩》,如题所说,好玩往往是强大的驱动力。定制自己的Editor,虽然要花不少时间,但是折腾的过程也是学习的过程,我很享受这个过程~

6年前 评论
imxfly

@dinghua 忘记艾特你了,上面的就是我自己的个人观点啦~

6年前 评论
imxfly

@carlclone 这也是PHP被诟病的其中一大原因,市面上的PHPer写出的PHP代码确实。。。

但是依赖IDE虽然能约束你写的代码的一定规范性,但如果自己能主动去写出漂亮的代码,这不是一件更好的事么~

6年前 评论

还没用上 phpmd /path/to/ text unusedcode 会更改原文件吗

6年前 评论
Summer

@Stephen

依赖IDE虽然能约束你写的代码的一定规范性,但如果自己能主动去写出漂亮的代码,这不是一件更好的事么~

不能同意更多哈。

6年前 评论
imxfly

@Summer 谢谢Summer哥认同哈~ :see_no_evil:

6年前 评论
imxfly

@mingyun 自然是不会的,不同于 phpcbf,phpmd只是帮你检测并提醒开发者,改不改还是开发者们自己说了算 :smile:

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!