Je suis sûr qu'il y a une explication très simple à cela. Quelle est la différence entre ceci:
function barber($type){
echo "You wanted a $type haircut, no problem\n";
}
call_user_func('barber', "mushroom");
call_user_func('barber', "shave");
... et ceci (et quels sont les avantages?):
function barber($type){
echo "You wanted a $type haircut, no problem\n";
}
barber('mushroom');
barber('shave');
call_user_func
n'est pas nécessairement nécessaire. Vous pouvez toujours appeler une fonction en utilisant des fonctions variables:$some_func()
.call_user_func_array
est celui qui est vraiment utile.$func = function(){};
. Tout paramètre possible de call_user_func doit être appelable, ce qui signifie qu'il contient suffisamment de données pour y accéder directement, que ce soit$func()
, ou$obj->{$func}()
, ou autre.Bien que vous puissiez appeler les noms de fonctions variables de cette façon:
il y a des cas où vous ne savez pas combien d'arguments vous transmettez. Considérer ce qui suit:
C'est également pratique pour appeler des méthodes statiques et objet, respectivement:
la source
l'
call_user_func
option est là pour que vous puissiez faire des choses comme:où la
dynamicFunctionName
chaîne pourrait être plus excitante et générée au moment de l'exécution. Vous ne devriez pas utiliser call_user_func sauf si vous devez le faire, car il est plus lent.la source
J'imagine que c'est utile pour appeler une fonction dont vous ne connaissez pas le nom à l'avance ... Quelque chose comme:
la source
$func('stuff');
call_user_func()
dans ce scénario.Avec PHP 7, vous pouvez utiliser partout la meilleure syntaxe de fonction variable. Il fonctionne avec des fonctions statiques / d'instance et peut prendre un tableau de paramètres. Plus d'informations sur https://trowski.com/2015/06/20/php-callable-paradox
la source
Il n'y a aucun avantage à appeler la fonction comme ça parce que je pense que c'était principalement utilisé pour appeler la fonction "utilisateur" (comme le plugin) parce que l'édition du fichier core n'est pas une bonne option. voici un exemple sale utilisé par Wordpress
...
....
production
la source
dans votre premier exemple, vous utilisez le nom de la fonction qui est une chaîne. il peut venir de l'extérieur ou être déterminé à la volée. c'est-à-dire que vous ne savez pas quelle fonction devra être exécutée au moment de la création du code.
la source
Lors de l'utilisation d'espaces de noms, call_user_func () est le seul moyen d'exécuter une fonction dont vous ne connaissez pas le nom au préalable, par exemple:
Si toutes vos fonctions étaient dans le même espace de noms, alors ce ne serait pas un tel problème, car vous pourriez utiliser quelque chose comme ceci:
Edit: Après @Jannis disant que je me trompe, j'ai fait un peu plus de tests et je n'ai pas eu beaucoup de chance:
Vous pouvez voir les résultats de sortie ici: https://3v4l.org/iBERh il semble que la deuxième méthode fonctionne à partir de PHP 7, mais pas de PHP 5.6.
la source