当这两种方法完全不同时,为什么 Scrutinizer 会说“重复代码”?这是误报还是 Scrutinizer 确实想以更抽象的方式来看待它?
最佳答案
我的猜测是他们做了所谓的“规范化”,即文本被分成更小的部分(称为标记),然后其中一些标记被不同的文本替换,使它们完全相同。例如,所有数字和字符串都归一化为相同的数字/字符串。
这确保您可以找到仅在文字上不同的克隆,这很有用,因为这通常意味着您可以提取一个实用方法,将这些不同的文字作为参数,从而减少代码中的冗余。
因此对于克隆检测器,您的代码将看起来像这样(所有大写文本都已标准化):
public function IDENTIFIER($VARIABLE1) {
$VARIABLE2 = $this->database->prepare(STRING);
$VARIABLE2->execute(ARRAY_EXPRESSION);
if ($VARIABLE2->rowCount() == INTEGER) {
return BOOLEAN;
}
return BOOLEAN;
}
这两个函数将被规范化为完全相同的表示形式,然后克隆检测器会将其作为重复代码拾取。
我能看到的对您的代码唯一合理的重构是提取一个辅助函数来处理准备和执行查询并返回行数:
public function executeRowCountQuery($query_string, $query_variables) {
$query = this->database->prepare($query_string);
$query->execute($query_variables);
return $query->rowCount();
}
如果您有许多只对行计数感兴趣的不同查询,这可能有意义。
关于php - 当代码完全不同时,为什么 Scrutinizer 会说 "duplicate code"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27734499/