2012-01-04 14 views
0

PHPの関数preg_replace_callback()に問題があります。私は2つのパラメータを必要とする関数を呼びたい。インターネット上preg_replace_callback()の2番目のパラメータ

private function parse_variable_array($a, $b) 
{ 
    return $a * $b; 
} 

私は、コードのこの部分が見つかりました:

preg_replace_callback("/regexcode/", call_user_func_array(array($this, "foo"), array($foo, $bar)), $subject); 

をしかし、私はpreg_replace_callback

では普通であるマッチの配列を使用することはできません関数fooに私はあなたが役立つことを願って私!

答えて

5

コールバックがそのまま呼び出されるため、追加のパラメータを渡すことはできません。あなたは単純なラッパー関数を作ることができます。 PHP 5.3+のために、その簡単に匿名関数で行われています:

preg_replace_callback(..., function ($match) { 
    return parse_variable_array($match, 42); 
}, ...); 

古いPHPのバージョンでは、あなたがコールバックとしていつものように渡す通常の関数を作ります。

+2

匿名関数の追加パラメータを宣言することもできます。 'function($ matches)use($ otherVar){...}'は、(globalを避けるだけでなく)役立ちます。 – cmbuckley

+0

これは「追加パラメータの宣言」ではないことを踏まえて、いくつかの文脈を詰めています。 :) – deceze

+0

問題はPHPバージョン5.2.17で動作することです。 例の '42'は関数のパラメータである必要があります。したがって、ローカル変数などを参照することはできません。 私はreglar関数を作成する必要がありますが、私は可能性を見ていないと言いました。もう一度手伝ってもらえますか? –

関連する問題