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