2010-01-24 12 views
32

Voglio creare una funzione (my_function()) ottenendo un numero illimitato di argomenti e passandoli in un'altra funzione (call_another_function()).PHP, come passare i valori di func-get-arg a un'altra funzione come lista di argomenti?

function my_function() {  
    another_function($arg1, $arg2, $arg3 ... $argN);  
} 

Quindi, voglio chiamare my_function(1,2,3,4,5) e ottenere chiamando another_function(1,2,3,4,5)

so che shoud uso func_get_args() per ottenere tutti gli argomenti delle funzioni come array, ma non so come passare questo argomenti a un'altra funzione .

Grazie.

+0

Non riesci a modificare Another_Function di accettare un array come parametro? – Aif

+0

No, è la funzione di terze parti :( – Kirzilla

risposta

48

Prova call_user_func_array:

function my_function() {  
    $args = func_get_args(); 
    call_user_func_array("another_function", $args); 
} 

Nella programmazione e informatica, questo si chiama una funzione apply.

+8

Attenzione però, func_get_args non può essere utilizzato come parametro per un'altra funzione! È necessario una variabile temporanea per acquisire gli argomenti prima, perché – fresch

+1

@fresch, perché è quello? –

+2

@Jordan, dai un'occhiata a questa domanda: http://stackoverflow.com/questions/4979507/difference-in-behaviour-of-func-num-args-func-get-arg-and-func- get-args-from-php –

11

Usa call_user_func_array come

call_user_func_array('another_function', func_get_args()); 
+0

Nota: Funzionerà solo in PHP 5.3+ – MPV

1

Non è ancora stato documentato, ma è possibile utilizzare l'API reflection, in particolare invokeArgs.

(forse avrei dovuto usare un commento piuttosto che un intero post)

+0

Ho verificato API di reflection, ma il mio OOP PHP è troppo scarso per comprendere il lato pratico di "reflection API". ( – Kirzilla

+0

Ecco l'URL piacevole http://www.tuxradar.com/practicalphp/16/4/0 che mi ha aiutato a capire la classe Reflection. – Kirzilla

Problemi correlati