最严格的评级是由Scrutinizer声明的PHP操作

时间:2017-05-21 22:28:53

标签: php laravel scrutinizer

我使用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;
}

这个功能正在尝试插入常规的空战士  /同质的方式

但对我来说,这种方法看起来还不错,我没看到什么?

任何更好的方法来实现它???

1 个答案:

答案 0 :(得分: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,我不知道这个方法做了什么,也很难为它编写任何单元测试。