如何重构我的php方法


How to refactor my php methods?

我有一个关于简化代码的问题。

我有

 public function getText($text){
      if(!empty($text)){
          $dom = new DomDocument();
          $dom->loadHTML($text);
          $xpath=new DOMXpath($dom);
          $result = $xpath->query('//a');
          if($result->length > 0){
              $atags=$dom->getElementsByTagName('a');
              foreach($atags as $atag){
                  $style = $atag ->getAttribute('style');
                  $atag->setAttribute('style',$style.' text-decoration:none;color:black;');
              }
              $returnText .= $dom->saveHTML();
              return $returnText;
          }
          $result = $xpath->query('//table');
          if($result->length > 0){
              $tables = $dom->getElementsByTagName('table');              
              $inputs = $dom->getElementsByTagName('input');
              foreach ($inputs as $input) {
                  $input->setAttribute('style','text-align:center;');
              }
              foreach ($tables as $table) {
                  $table->setAttribute('width',500);
                  $table->setAttribute('style','border:2px solid #8C8C8C;text-align:center;table-layout:fixed;');
              }
              $returnText .= $dom->saveHTML();
              return $returnText;
          }
      }
      return $text;
  }
  public function getTextwithIndex($text,$index=''){
      if(!empty($text[$index])){
          $dom = new DomDocument();
          $dom->loadHTML($text[$index]);
          $xpath=new DOMXpath($dom);
          $result = $xpath->query('//a');
          if($result->length > 0){
              $atags=$dom->getElementsByTagName('a');
              foreach($atags as $atag){
                  $style = $atag ->getAttribute('style');
                  $atag->setAttribute('style',$style.' text-decoration:none;color:black;');
              }
              $returnText .= $dom->saveHTML();
              return $returnText;
          }
          $result = $xpath->query('//tbody');
          if($result->length > 0){
              $tbodies = $dom->getElementsByTagName('tbody');
              $cells = $dom->getElementsByTagName('td');
              $inputs = $dom->getElementsByTagName('input');
              foreach ($inputs as $input) {
                  $input->setAttribute('style','text-align:center;');
              }
              foreach ($cells as $cell) {
                  $cell->setAttribute('style','border:1px solid black;');
              }
              foreach ($tbodies as $tbody) {
                  $table = $dom->createElement('table');
                  $table->setAttribute('width',500);
                  $table->setAttribute('style','border:2px solid #8C8C8C;text-align:center;table-layout:fixed;');
                  $tbody->parentNode->replaceChild($table, $tbody);
                  $table->appendChild($tbody);
              }
              $returnText .= $dom->saveHTML();
              return $returnText;
          }
      }
      return $text;
  }

该方法的区别在于$index和对我的domdocument的一些修改。我觉得这真的很麻烦,可能需要一些重构。有人有什么好的建议吗?谢谢

这样的东西怎么样:

public function getTextwithIndex($text,$index='') {
    if (empty($index))
        return getText($text); //not sure how $text works, so this line might be different.
    return getText($text[$index]);
}

或者类似的东西:

public function getText($text, $index = false){
    if ($index)
        $text = $text[$index];
  if(!empty($text)){
      $dom = new DomDocument();
      $dom->loadHTML($text);
      $xpath=new DOMXpath($dom);
      $result = $xpath->query('//a');
      if($result->length > 0){
          $atags=$dom->getElementsByTagName('a');
          foreach($atags as $atag){
              $style = $atag ->getAttribute('style');
              $atag->setAttribute('style',$style.' text-decoration:none;color:black;');
          }
          $returnText .= $dom->saveHTML();
          return $returnText;
      }
      $result = $xpath->query('//table');
      if($result->length > 0){
          if ($index) {
              //do 'getTextWithIndex' dom stuff
          } else {
              $tables = $dom->getElementsByTagName('table');              
              $inputs = $dom->getElementsByTagName('input');
          }
          foreach ($inputs as $input) {
              $input->setAttribute('style','text-align:center;');
          }
          foreach ($tables as $table) {
              $table->setAttribute('width',500);
              $table->setAttribute('style','border:2px solid #8C8C8C;text-align:center;table-layout:fixed;');
          }
          $returnText .= $dom->saveHTML();
          return $returnText;
      }
  }
  return $text;

}