我使用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;
}
这个功能正在尝试插入常规的空战士 /同质的方式
但对我来说,这种方法看起来还不错,我没看到什么?
任何更好的方法来实现它???
答案 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,我不知道这个方法做了什么,也很难为它编写任何单元测试。