Ich bin sicher, dass es dafür eine sehr einfache Erklärung gibt. Was ist der Unterschied zwischen diesen:
function barber($type){
echo "You wanted a $type haircut, no problem\n";
}
call_user_func('barber', "mushroom");
call_user_func('barber', "shave");
... und das (und was sind die Vorteile?):
function barber($type){
echo "You wanted a $type haircut, no problem\n";
}
barber('mushroom');
barber('shave');
call_user_func
wird nicht unbedingt benötigt. Sie können eine Funktion jederzeit mit variablen Funktionen aufrufen :$some_func()
.call_user_func_array
ist derjenige, der wirklich nützlich ist.$func = function(){};
. Jeder möglicher Parameter call_user_func hat aufrufbar zu sein, was bedeutet , dass es genügend Daten für den Zugriff enthält es direkt, ob das$func()
, oder$obj->{$func}()
, oder was auch immer.Obwohl Sie variable Funktionsnamen folgendermaßen aufrufen können:
Es gibt Fälle, in denen Sie nicht wissen, wie viele Argumente Sie übergeben. Folgendes berücksichtigen:
Es ist auch praktisch, um statische bzw. Objektmethoden aufzurufen:
quelle
Die
call_user_func
Option ist da, damit Sie Dinge tun können wie:wo die
dynamicFunctionName
Zeichenfolge aufregender sein und zur Laufzeit generiert werden könnte. Sie sollten call_user_func nicht verwenden, es sei denn, Sie müssen, weil es langsamer ist.quelle
Ich stelle mir vor, es ist nützlich, um eine Funktion aufzurufen, deren Namen Sie nicht im Voraus kennen ... So etwas wie:
quelle
$func('stuff');
call_user_func()
in diesem Szenario nicht negiert .Mit PHP 7 können Sie überall die schönere Syntax mit variablen Funktionen verwenden. Es funktioniert mit statischen / Instanzfunktionen und kann eine Reihe von Parametern annehmen. Weitere Informationen unter https://trowski.com/2015/06/20/php-callable-paradox
quelle
Es gibt keine Vorteile, wenn man die Funktion so aufruft, weil ich denke, dass sie hauptsächlich zum Aufrufen der "Benutzer" -Funktion (wie das Plugin) verwendet wird, da das Bearbeiten der Kerndatei keine gute Option ist. Hier sind schmutzige Beispiele, die von Wordpress verwendet werden
...
....
Ausgabe
quelle
In Ihrem ersten Beispiel verwenden Sie den Funktionsnamen, bei dem es sich um eine Zeichenfolge handelt. es kann von außen kommen oder im laufenden Betrieb bestimmt werden. Das heißt, Sie wissen nicht, welche Funktion zum Zeitpunkt der Codeerstellung ausgeführt werden muss.
quelle
Wenn Sie Namespaces verwenden, ist call_user_func () die einzige Möglichkeit, eine Funktion auszuführen, deren Namen Sie vorher nicht kennen, zum Beispiel:
Wenn sich alle Ihre Funktionen im selben Namespace befinden würden, wäre dies kein Problem, da Sie Folgendes verwenden könnten:
Edit: Nachdem @Jannis gesagt hat, dass ich falsch liege, habe ich ein bisschen mehr getestet und hatte nicht viel Glück:
Sie können die Ausgabeergebnisse hier sehen: https://3v4l.org/iBERh Es scheint, dass die zweite Methode ab PHP 7 funktioniert, nicht jedoch PHP 5.6.
quelle