如何重构我的php方法?

时间:2013-08-28 16:32:34

标签: php refactoring domdocument

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

我有

 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的一些修改。我觉得它真的很麻烦,可以使用一些重构。有没有人有什么好建议?谢谢!

1 个答案:

答案 0 :(得分:0)

这样的事情怎么样:

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;

}