0

我使用scrutinizer来分析我的代码,我得到了一个声明的函数:

最差的 PHP 操作

这是功能:

/**
 * Insert Empty Fighters in an homogeneous way.
 *
 * @param Collection $fighters
 * @param Collection $byeGroup
 *
 * @return Collection
 */
private function insertByes(Collection $fighters, Collection $byeGroup)
{
    $bye = count($byeGroup) > 0 ? $byeGroup[0] : [];
    $sizeFighters = count($fighters);
    $sizeByeGroup = count($byeGroup);

    $frequency = $sizeByeGroup != 0
        ? (int)floor($sizeFighters / $sizeByeGroup)
        : -1;

    // Create Copy of $competitors
    $newFighters = new Collection();
    $count = 0;
    $byeCount = 0;
    foreach ($fighters as $fighter) {
        if ($frequency != -1 && $count % $frequency == 0 && $byeCount < $sizeByeGroup) {
            $newFighters->push($bye);
            $byeCount++;
        }
        $newFighters->push($fighter);
        $count++;
    }

    return $newFighters;
}

此功能正在尝试以常规/同质的方式插入 Empty Fighters

但是对我来说,这种方法似乎还可以,我没有看到什么?

有没有更好的方法来实现它???

4

1 回答 1

1

误导性名称(可能没有被 Scrutinizer 发现)。在任何时候$byeGroup都不需要实际收集

private function insertByes(Collection $fighters, Collection $byeGroup)

一个if语句,它只用于拉出一些东西,它应该是一个方法的参数。

    $bye = count($byeGroup) > 0 ? $byeGroup[0] : [];
    $sizeFighters = count($fighters);
    $sizeByeGroup = count($byeGroup);

另一个if增加复杂性的声明。也使用弱比较。

    $frequency = $sizeByeGroup != 0
        ? (int)floor($sizeFighters / $sizeByeGroup)
        : -1;

    // Create Copy of $competitors
    $newFighters = new Collection();
    $count = 0;
    $byeCount = 0;

这个 foreach 的内容很可能应该采用单独的方法。

    foreach ($fighters as $fighter) {

另一个if语句(也包含弱比较)中的复杂条件在命名良好的私有方法中也应该更好。

        if ($frequency != -1 && $count % $frequency == 0 && $byeCount < $sizeByeGroup) {

由于$bye可以是一个空数组,这有点没有意义。

            $newFighters->push($bye); 
            $byeCount++;
        }
        $newFighters->push($fighter);
        $count++;
    }

    return $newFighters;
}

TBH,我不知道这个方法是做什么的,而且它也很难为它编写任何单元测试。

于 2017-05-21T23:16:24.303 回答