2009-11-24 92 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

Cletus - 谢谢! 这工作得很好。我希望所有的头发都会长出来:-) – Byrl 2009-11-25 00:13:30

+0

同时使用'Python':'function_name(* parameters_array)'...我真的很喜欢PHP。 – 2014-06-13 19:03:11

-2

你可以使用eval

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

虽然你可能需要做一些拉姆达技巧把你的参数报价和/或转义:

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

是的 - 谢谢弗兰克!我试过这个,但因数组值的引用而陷入困境。 有点凌乱... – Byrl 2009-11-25 00:12:32