识别PHP项目中的重复代码

时间:2010-09-23 13:23:13

标签: php refactoring copy-paste code-duplication

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

感谢。

4 个答案:

答案 0 :(得分:13)

您可以使用phpcpd

  

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

更多资源:

答案 1 :(得分:3)

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

它还可以计算代码的Cyclomatic complexity

以下是phpuc中的pmd标签的屏幕截图:pmd tab

答案 2 :(得分:2)

请参阅我们的PHP Clone Detector工具。

尽管重新格式化,插入/删除注释,替换变量名称,添加/替换子块等,这仍然可以找到精确副本和接近未命中。

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

答案 3 :(得分:0)

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

然而,我认为最终你需要手动完成所有操作,因为听起来这段代码需要大量的重构,即使有差异你也可能需要评估这是故意的还是错误。