我对代码重复有一个奇怪的问题。有很多像这样的循环:
$prev_name = null;
$clone = null;
while($row = mysql_fetch_assoc($res)){
if($prev_name != $row['req']){
if($prev_name){
while($clone <= $end){
echo '<td>-</td>';
$clone->step();
}
echo '</tr>';
}
echo '<tr><td>' . htmlspecialchars($prev_name = $row['req']) . '</td>';
$clone = clone $start;
}
$rowdate = date_create($row['date']);
while($clone < $rowdate){
echo '<td>-</td>';
$clone->step();
}
echo '<td>' . $row[$field] . '</td>';
$clone->step();
}
if($prev_name){
while($clone <= $end){
echo '<td>-</td>';
$clone->step();
}
echo '</tr>';
}
如你所见,循环后的if()与循环中的2-if if()相同。是否有可能减少这种重复?
答案 0 :(得分:3)
把它放在一个函数中。
function writeSteps($prev_name,$clone,$end)
{
if($prev_name){
while($clone <= $end){
echo '<td>-</td>';
$clone->step();
}
}
答案 1 :(得分:1)
不确定。 Extract Method是你的朋友。
只需将此代码放入方法中并从两个位置调用它。
if($prev_name){
while($clone <= $end){
echo '<td>-</td>';
$clone->step();
}
echo '</tr>';
}