2017-01-23 5 views
1

同じ構造で繰り返し実行するメソッドが2つあります。 最初に "div"タグを検索し、 "tr"タグを検索した後です。彼らは同じforeachを使用します。同じforeachを使用して、異なる数のパラメータで異なるメソッドを呼び出す

public function findClass($nome){ 
    foreach ($this->conteudo->getElementsByTagName($this->class) as $node) { 
     if (preg_match("/" . $nome . "/", $node->getAttribute("class"))) { 
      return $node; 
     } 
    } 
} 

public function separar($name, $tag){ 
    foreach ($this->conteudo->getElementsByTagName($this->class) as $node) { 
     $aux = array_map($name, explode($tag, $node->textContent)); 
    } 
    return $aux; 
} 

メソッドが、異なる数のパラメータでforeach関数と次の関数を呼び出す方法を作成します。

私はこのような何かを試してみたが、私は何をやっていることは良い考えであることを確信していないです

public function findClass($nome) 
{ 
    return $this->buscar('classe', $nome); 
} 

public function applyFuncToExplode($function, $tag){ 
    return $this->buscar('map', $function, $tag); 
} 

public function buscar($metodo, [$parameters]){ 
    foreach ($this->conteudo->getElementsByTagName($this->class) as $node) { 
     $this->$metodo($node, [$parameters]); 
    } 
    $this->class = null; 
} 

public function classe($node, $nome){ 
    if (preg_match("/" . $nome . "/", $node->getAttribute("class"))) { 
     return $node; 
    } 
} 

public function map($node, $function, $tag){ 
    return array_map($function, explode($tag, $node->textContent)); 
} 

答えて

0

パラメータの数の問題を抱えているが、我々は、あなたがにcall_user_funcルーチンを使用することができることを無視した場合関数を呼び出すと、偶然にの配列を渡す:

call_user_func_array (callable $callback , array $param_arr) 

参照:

http://php.net/manual/en/function.call-user-func-array.php 

残念ながら、投稿から何をしようとしているのか分かりませんので、文脈上の例を書くことはできません。

+0

同じforeachとdifferents論理を使用するすべてのメソッドに関数を作りたいこのforeach内でパラメータの数が異なる –

+0

次に大きな問題は、どのような関数を呼び出すかを決めることです。ここでXML/HTMLをトラバースしていて、あなたの関数を選択するために何らかの名前の対称性を使用していますか?さもなければ、私はforeachループを "再利用"することによって(コードには読めない)何が得られるのだろうかと疑問に思う。 –

+0

利得がない。別のhtmlクラスを見つけるために同じループを呼び出すたびに期待する。 –

関連する問題