15

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

谢谢。

4

4 回答 4

14

您可以使用phpcpd

phpcpd 是 PHP 代码的复制/粘贴检测器 (CPD)。它扫描 PHP 项目中的重复代码。

更多资源:

于 2010-09-23T13:29:01.150 回答
4

您可以使用 phpunit PMD (Project Mess Detector) 来检测重复的代码块。

它还可以计算代码的圈复杂度

这是 phpuc 中 pmd 选项卡的屏幕截图:pmd 选项卡

于 2010-09-23T13:25:37.350 回答
2

请参阅我们的PHP 克隆检测器工具。

尽管重新格式化、插入/删除注释、替换变量名、添加/替换子块等,这都会找到精确的副本和未命中的错误。

据我所知,PHPCPD 只找到完全相同的(令牌)序列。这错过了很多克隆,因为复制粘贴之后最常见的操作是编辑到自定义。所以它会错过 OP 试图找到的克隆。

于 2010-10-24T18:19:17.637 回答
0

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

但是,我认为最终您无论如何都需要手动完成所有内容,因为听起来这段代码需要大量重构,即使存在差异,您也可能需要评估这是故意的还是错误的。

于 2010-09-23T13:26:33.933 回答