2009-11-24 3 views
14

J'ai un tableau de longueur variable que j'ai besoin de transposer dans une liste de paramètres pour une fonction. J'espère qu'il y a une bonne façon de le faire - mais je ne vois pas comment.PHP: Tableau à valeurs de paramètre de fonction variable

Le code que j'écris appelle une méthode dans une classe - mais je ne connaîtrai pas le nom de la méthode ni le nombre de paramètres qu'elle contient.

J'ai essayé - mais il ne fonctionne pas:

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

Les morceaux ci-dessus toutes les valeurs dans le premier paramètre de la fonction. Alors qu'il devrait appeler la fonction avec 3 valeurs de paramètre (test, test2, test3).

Ce que je dois est le suivant:

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

Toute idée comment faire cela d'une manière ordonnée?

Répondre

27

Oui, utiliser call_user_func_array():

call_user_func_array('function_name', $parameters_array); 

Vous pouvez également utiliser cette méthode pour appeler des méthodes dans une 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 - Merci !! Cela a fonctionné un régal. J'espère que tous les poils que j'ai retirés vont repousser :-) – Byrl

+0

En attendant en utilisant 'Python':' nom_fonction (* paramètres_array) '... j'ai vraiment aimé PHP. –

-2

Vous pouvez utiliser eval:

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

Bien que vous pourriez avoir besoin de faire un peu de ruse lambda pour obtenir vos paramètres cités et/ou se sont échappés:

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

Ouais - Merci Frank! J'ai essayé ceci mais je me suis enlisé avec la citation des valeurs de tableau. peu désordonné ... – Byrl

Questions connexes