2009-11-24 23 views
14

Ich habe ein Array variabler Länge, das ich in eine Liste von Parametern für eine Funktion transponieren muss.PHP: Array zu variablen Funktionsparameterwerten

Ich hoffe, es gibt eine nette Möglichkeit, dies zu tun - aber ich kann nicht sehen, wie.

Der Code, den ich schreibe, wird eine Methode in einer Klasse aufrufen - aber ich werde weder den Namen der Methode noch die Anzahl der Parameter kennen.

Ich habe versucht - aber es funktioniert nicht:

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

Die oben genannten Klumpen die Funktion alle Werte in den ersten Parameter. Dabei sollte die Funktion mit 3 Parameterwerten (test, test2, test3) aufgerufen werden.

Was ich brauche, ist dies:

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

Irgendwelche Ideen, wie diese ordentlich zu tun?

Antwort

27

Ja, verwenden call_user_func_array():

call_user_func_array('function_name', $parameters_array); 

Sie können damit auch Methoden in einer Klasse aufrufen:

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 - Danke !! Dies funktionierte ein Vergnügen. Ich hoffe, dass alle Haare, die ich herausgezogen habe, wieder wachsen werden :-) – Byrl

+0

In der Zwischenzeit benutze 'Python':' function_name (* parameter_array) '... Ich habe PHP wirklich geliebt. –

-2

könnten Sie eval verwenden:

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

Obwohl Sie einige Lambda-Tricks könnten tun müssen, um Ihre Parameter zitiert werden und/oder entkommen:

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

Ja - Danke Frank! Ich habe das ausprobiert, bin aber mit dem Zitat der Array-Werte festgefahren. bit chaotisch ... – Byrl