2009-11-24 9 views
14

私は関数のパラメータのリストに移り変わる必要がある可変長配列を持っています。PHP:可変関数のパラメータ値への配列

これを行うためのきちんとした方法があることを願っていますが、私はどのように見えません。

私が書いているコードは、クラス内のメソッドを呼び出すことになりますが、メソッドの名前やいくつのパラメータがあるか分かりません。

は、私はこれを試してみました - しかし、それは動作しません:

$params = array(1 => "test", 2 => "test2", 3 => "test3"); 
ClassName::$func_name(implode($params, ",")); 

上記の塊のすべての値を関数の最初のパラメータに。一方、3つのパラメータ値(test、test2、test3)で関数を呼び出す必要があります。きちんとこれを行う方法を

ClassName::$func_name("test", "test2", "test3"); 

任意のアイデア:私は必要なもの

はこれですか?

答えて

27

はい、call_user_func_array()使用:

call_user_func_array('function_name', $parameters_array); 

これを使用して、クラス内のメソッドを呼び出すこともできます。

class A { 
    public function doStuff($a, $b) { 
    echo "[$a,$b]\n"; 
    } 
} 

$a = new A; 
call_user_func_array(array($a, 'doStuff'), array(23, 34)); 
+0

クレタス - ありがとう! これは治療になりました。 – Byrl

+0

一方、 'Python':' function_name(* parameters_array) '...私は本当にPHPを愛するようになりました。 –

-2

あなたはevalを使用することができます。

eval("$func_name(" . implode($params, ",") . ");"); 

あなたのパラメータが引用されたおよび/またはエスケープを取得するためにいくつかのラムダトリックを行う必要があるかもしれないが:

$quoted_escaped_params = array_map(create_function('$a', 'return "\"". str_replace("\"",` "\\\"", $a) . "\""'), $params); 
+0

ええ、ありがとうフランク!私はこれを試しましたが、配列の値を引用していました。 ビットちょっと... – Byrl