2009-11-24 38 views
14

Ho una matrice di lunghezza variabile che ho bisogno di trasporre in una lista di parametri per una funzione.PHP: Array ai valori dei parametri delle funzioni variabili

Spero che ci sia un buon modo per farlo - ma non riesco a vedere come.

Il codice che sto scrivendo chiamerà un metodo in una classe, ma non conoscerò il nome del metodo, né quanti parametri ha.

Ho provato questo - ma non funziona:

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

I suddetti grumi tutti i valori nel primo parametro della funzione. Considerando che dovrebbe chiamare la funzione con 3 valori di parametro (test, test2, test3).

cosa ho bisogno è questo:

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

Tutte le idee come fare questo ordinatamente?

risposta

27

Sì, utilizzare call_user_func_array():

call_user_func_array('function_name', $parameters_array); 

È possibile utilizzare questo metodo anche per chiamare in una classe:

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 - Grazie !! Questo ha funzionato a meraviglia. Spero che tutti i capelli che ho tirato fuori possano ricrescere :-) – Byrl

+0

Nel frattempo usando 'Python':' function_name (* parameters_array) '... Ho davvero imparato ad amare PHP. –

-2

Si potrebbe utilizzare eval:

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

Anche se potrebbe essere necessario fare un po 'lambda inganno per ottenere i parametri citati e/o fuggiti:

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

Sì, grazie Frank! Ho provato questo ma mi sono impantanato con la quotazione dei valori dell'array. bit disordinato ... – Byrl

Problemi correlati