2009-12-15 16 views
6

La funzione qui sotto genera errore quando una funzione contiene argomenti citati per esempio:PHP: call_user_func_array: passaggio dal problema riferimento

function test(&$arg, &$arg2) 
{ 
    // some code 
} 

Ora non posso utilizzare call_user_func_array per la funzione sopra, verrà generato un errore.

Come risolvere questo problema?

Ho bisogno di usare call_user_func_array.

Supporre anche che non so in anticipo se sono passati per riferimento o passati per valore.

Grazie

+4

Vale la pena per voi di annullare la risposta corrente in quanto è letteralmente sbagliato (per non parlare dei consigli errati da parte di oggetti che cambiano completamente la semantica del problema): http: //codepad.viper-7 .com/j3GOps – ircmaxell

risposta

7

Una grande soluzione è stato pubblicato il http://www.php.net/manual/de/function.call-user-func-array.php#91503

function executeHook($name, $type='hooks'){ 
    $args = func_get_args(); 
    array_shift($args); 
    array_shift($args); 
    //Rather stupid Hack for the call_user_func_array(); 
    $Args = array(); 
    foreach($args as $k => &$arg){ 
     $Args[$k] = &$arg; 
    } 
    //End Hack 
    $hooks = &$this->$type; 
    if(!isset($hooks[$name])) return false; 
    $hook = $hooks[$name]; 
    call_user_func_array($hook, $Args); 
} 

L'hack attuale è circondato da commenti.

+1

grazie amico, mi ha salvato la vita! questa è sicuramente la risposta corretta – Mangiucugna

+0

Cheesus, grazie! – maryisdead

+0

Ha parlato troppo presto ... Mentre questo rimuove l'errore, non mi permette di manipolare la variabile di riferimento all'interno del callable. – maryisdead

21

Quando si memorizzano i parametri della matrice, assicurarsi che si sta memorizzando un riferimento a questi parametri, dovrebbe funzionare bene.

Ie:

call_user_func_array("test", array(&param1, &param2)); 
+2

ma cosa succede se non so in anticipo se sono passati per riferimento o passati per valore? – Sarfraz

+1

Quindi capire un modo per determinare che, o farli passare tutti per riferimento sarebbe il mio suggerimento. Non ho molto altro da fare, ho paura. – Myles

+0

Myles: cosa succede se non conosco la quantità di argomenti nell'array? – ymakux

Problemi correlati