14

関数のパラメーターのリストに転置する必要がある可変長配列があります。

これを行うためのきちんとした方法があることを願っていますが、方法がわかりません。

私が書いているコードは、クラス内のメソッドを呼び出しますが、メソッドの名前も、メソッドのパラメーターの数もわかりません。

私はこれを試しましたが、うまくいきません:

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

上記は、すべての値を関数の最初のパラメーターにまとめます。一方、3 つのパラメーター値 (test、test2、test3) を使用して関数を呼び出す必要があります。

私が必要とするのはこれです:

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

これをきちんと行う方法はありますか?

4

2 に答える 2

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));
于 2009-11-24T23:56:27.110 に答える
-2

使用できますeval

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

パラメータを引用またはエスケープするために、ラムダのトリックを行う必要があるかもしれませんが:

  $quoted_escaped_params = array_map(create_function('$a', 'return "\"". str_replace("\"",` "\\\"", $a) . "\""'), $params);
于 2009-11-24T23:55:16.020 に答える