Ich scheine mich zu erinnern, dass es in PHP eine Möglichkeit gibt, ein Array als Liste von Argumenten für eine Funktion zu übergeben und das Array auf die Standardweise func($arg1, $arg2)
zu dereferenzieren . Aber jetzt weiß ich nicht, wie es geht. Ich erinnere mich an die Art der Referenzübergabe, wie man eingehende Parameter "globalisiert" ... aber nicht, wie man das Array in eine Liste von Argumenten auflistet.
Es mag so einfach sein wie func(&$myArgs)
, aber ich bin mir ziemlich sicher, dass es nicht so ist. Leider hat das php.net-Handbuch bisher nichts preisgegeben. Nicht, dass ich diese spezielle Funktion im letzten Jahr oder so verwenden musste.
$args = [1,2,3]; function(...$args){}
callable
verwenden, das dasselbe verwendetcall_user_func_array
, nur mit Array, wobei das erste Element das Objekt und das zweite die Methode ist. Zum Beispielcall_user_func_array([$object, 'method'], $myArgs);
Wie bereits erwähnt , können (sollten!) Ab PHP
...
5.6+ das Token (auch bekannt als "Splat-Operator", Teil der Funktionalität für verschiedene Funktionen) verwendet werden, um eine Funktion mit einer Reihe von Argumenten einfach aufzurufen:Hinweis: Array-Elemente werden anhand ihrer Position im Array und nicht anhand ihrer Schlüssel Argumenten zugeordnet .
Wie pro CarlosCarucce Kommentar , diese Form der Argumentation auspacken ist bei weitem die schnellste Methode in allen Fällen. In einigen Vergleichen ist es über 5x schneller als
call_user_func_array
.Beiseite
Weil ich denke, dass dies wirklich nützlich ist (obwohl es nicht direkt mit der Frage zusammenhängt): Sie können den Splat-Operator-Parameter in Ihrer Funktionsdefinition tippen , um sicherzustellen, dass alle übergebenen Werte einem bestimmten Typ entsprechen.
(Denken Sie daran, dass dies der letzte von Ihnen definierte Parameter sein MUSS und dass alle an die Funktion übergebenen Parameter im Array gebündelt werden.)
Dies ist ideal, um sicherzustellen, dass ein Array Elemente eines bestimmten Typs enthält:
quelle
call_user_func_array
. Also, wenn Sie PHP 5.6+ verwenden, würde ich dieses empfehlen. Hier ist ein Test , der im offiziellen PHP-WikiBeachten Sie außerdem, dass Sie die Funktion wie folgt übergeben müssen, wenn Sie eine Instanzmethode auf ein Array anwenden möchten:
quelle
$foo->bar()
Beispiel auf der verlinkten Seite legt nahe, dass dies der Fall sein solltearray($instance, "MethodName")
.call_user_func_array(array(parent, "__construct"), func_get_args());
Der Vollständigkeit halber funktioniert dies ab PHP 5.1 auch:
Siehe: http://php.net/reflectionfunction.invokeargs
Für Methoden verwenden Sie stattdessen ReflectionMethod :: invokeArgs und übergeben das Objekt als ersten Parameter.
quelle