2009-12-15 10 views
6

Die folgenden Funktionsfehler erzeugt, wenn eine Funktion enthält, verwiesen Argumente zB:PHP: call_user_func_array: pass durch Verweis Ausgabe

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

Jetzt habe ich nicht call_user_func_array für obige Funktion nutzen können, wird es einen Fehler.

Wie löst man dieses Problem?

Ich brauche call_user_func_array zu verwenden.

Gehen Sie auch davon aus, dass ich vorher nicht weiß, ob sie durch Referenz oder Wert übergeben werden.

Dank

+4

Es würde sich für Sie lohnen, die aktuelle Antwort nicht zu akzeptieren, da sie buchstäblich falsch ist (ganz zu schweigen von einem schlechten Rat durch Missbrauch von Objekten, was die Semantik des Problems komplett ändert): http: //codepad.viper-7 .com/j3GOps – ircmaxell

Antwort

7

Eine große Abhilfe wurde auf http://www.php.net/manual/de/function.call-user-func-array.php#91503 geschrieben

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); 
} 

Die eigentliche Hack von Kommentaren umgeben ist.

+1

Danke Mann, rettete mein Leben! das ist definitiv die richtige Antwort – Mangiucugna

+0

Cheesus, danke! – maryisdead

+0

Spoke zu früh ... Während dies den Fehler beseitigt, würde ich nicht die referenzierte Variable in der Callable manipulieren. – maryisdead

21

Wenn Ihre Parameter in dem Array zu speichern, stellen Sie sicher, dass Sie einen Verweis auf diese Parameter speichern, sollte es funktionieren.

Ie:

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

aber was passiert, wenn ich nicht vorher weiß, ob sie als Referenz übergeben oder nach Wert übergeben werden? – Sarfraz

+1

Dann finden Sie einen Weg, um das zu bestimmen, oder alle durch Verweis zu machen, wäre mein Vorschlag. Du kannst nicht viel mehr tun, fürchte ich. – Myles

+0

Myles: Was passiert, wenn ich die Anzahl der Argumente im Array nicht kenne? – ymakux

Verwandte Themen