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, ",") . ");");

尽管您可能需要做一些 lambda 技巧来引用和/或转义参数:

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