代码之家  ›  专栏  ›  技术社区  ›  robjmills

在PHP项目中识别重复的代码

  •  12
  • robjmills  · 技术社区  · 14 年前

    我在一个遗留项目中有一个至少几千行长的PHP文件。它主要由一个switch语句分为许多不同的条件块,大约有10种情况。在每种情况下,都有一个非常相似的代码块(如果不是完全重复的话)。对于我来说,哪些方法可以将这些代码块标识为相同的(或接近相同的),这样我就可以将代码抽象出来并开始重构整个文件?我知道这在非常手工的术语中是可能的(将代码中的每个case语句分隔成单独的文件和diff),但是我对我可以使用什么工具来加速这个过程感兴趣。

    谢谢。

    4 回复  |  直到 13 年前
        1
  •  13
  •   Gordon Haim Evgi    14 年前

    你可以用 phpcpd .

    php cpd是一个用于php代码的复制/粘贴检测器(cpd)。它扫描一个PHP项目中的重复代码。

    其他资源:

        2
  •  3
  •   greg0ire    14 年前

    您可以使用phpunit pmd(Project mess detector)来检测重复的代码块。

    它还可以计算 Cyclomatic complexity 你的代码。

    以下是phpuc中pmd选项卡的屏幕截图: pmd tab

        3
  •  2
  •   Ira Baxter    13 年前

    看看我们的 PHP Clone Detector 工具。

    尽管重新格式化、插入/删除注释、替换变量名、添加/替换子块等操作,但这会找到准确的副本和未遂事件。

    据我所知,phpcpd只能找到完全相同的(标记)序列。这会错过很多克隆,因为复制粘贴后最常见的操作是编辑自定义。所以它会错过那些正试图找到的克隆体。

        4
  •  0
  •   mikera    14 年前

    您可以将这些块放在单独的文件中,然后在它们上运行diff?

    不过,我认为最终你还是需要手动完成所有的事情,因为听起来这段代码需要大量的重构,即使存在差异,你也可能需要评估这是有意的还是一个错误。