2010-12-21 1 views
0

Ich habe eine seltsame Frage auf Code-Duplizierung. Es gibt viele Schleifen wie folgt aus: Paranoid: Vermeidung von Code-Duplizierung in/After-Loops

$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>'; 
    } 

, wie Sie sehen, ob() nach Schleife die gleiche wie 2-nd ist if() in Schleife. Ist es möglich, diese Art von Duplizierung zu reduzieren?

Antwort

3

Setzen Sie es in eine Funktion.

function writeSteps($prev_name,$clone,$end) 
{ 
    if($prev_name){ 
     while($clone <= $end){    
     echo '<td>-</td>';    
     $clone->step(); 
     } 
} 
1

Sicher. Extract Method ist dein Freund.

Einfach diesen Code in eine Methode einfügen und von beiden Stellen aufrufen.

if($prev_name){ 
    while($clone <= $end){    
    echo '<td>-</td>';    
    $clone->step(); 
    } 
    echo '</tr>'; 
}