我有一个可变长度数组,我需要将其转换为函数的参数列表。
我希望有一种巧妙的方法 - 但我看不出如何。
我正在编写的代码将调用类中的方法 - 但我不知道方法的名称,也不知道它有多少参数。
我试过这个 - 但它不起作用:
$params = array(1 => "test", 2 => "test2", 3 => "test3");
ClassName::$func_name(implode($params, ","));
以上将所有值都归为函数的第一个参数。而它应该调用具有3个参数值的函数(test,test2,test3)。
我需要的是:
ClassName::$func_name("test", "test2", "test3");
任何想法如何整齐地做到这一点?
答案 0 :(得分: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));
答案 1 :(得分:-2)
您可以使用eval
:
eval("$func_name(" . implode($params, ",") . ");");
虽然你可能需要做一些lambda技巧来引用和/或转义你的参数:
$quoted_escaped_params = array_map(create_function('$a', 'return "\"". str_replace("\"",` "\\\"", $a) . "\""'), $params);