2009-11-24 12 views
14

Tengo una matriz de longitud variable que necesito transponer a una lista de parámetros para una función.PHP: Matriz a valores de parámetros de función variable

Espero que haya una buena manera de hacerlo, pero no puedo ver cómo.

El código que estoy escribiendo llamará a un método en una clase, pero no sabré el nombre del método, ni cuántos parámetros tiene.

yo probamos este - pero no funciona:

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

Los anteriores grumos todos los valores en el primer parámetro de la función. Mientras que debería llamar a la función con 3 valores de parámetro (test, test2, test3).

Lo que necesito es la siguiente:

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

¿Alguna idea de cómo hacer esto perfectamente?

Respuesta

27

Sí, utilice call_user_func_array():

call_user_func_array('function_name', $parameters_array); 

Puede usar esto para llamar también a métodos en una clase:

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 - ¡Gracias! Esto funcionó muy bien. Espero que todo el pelo que saqué crecerá de nuevo :-) – Byrl

+0

Mientras tanto usando 'Python':' function_name (* parameters_array) '... Realmente me encantó PHP. –

-2

Usted podría utilizar eval:

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

Aunque es posible que tenga que hacer algún truco lambda para obtener sus parámetros citados y/o escaparon:

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

Sí - ¡Gracias Frank! Intenté esto pero me empantané con la cita de los valores de la matriz. poco desordenado ... – Byrl

Cuestiones relacionadas