質問

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

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

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

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

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

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

私に必要なのはこれです:

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

これをきれいに行う方法はありますか?

役に立ちましたか?

解決

はい、使用してください 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));

他のヒント

使用できます eval:

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

あなたのパラメーターを引用および/または逃げるためにいくつかのラムダのトリックを行う必要があるかもしれませんが:

  $quoted_escaped_params = array_map(create_function('$a', 'return "\"". str_replace("\"",` "\\\"", $a) . "\""'), $params);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top