Il me semble que je me souviens qu'en PHP, il existe un moyen de passer un tableau en tant que liste d'arguments pour une fonction, en déréférençant le tableau de func($arg1, $arg2)
manière standard . Mais maintenant, je ne sais plus comment faire. Je rappelle la manière de passer par référence, comment "glob" les paramètres entrants ... mais pas comment désenregistrer le tableau dans une liste d'arguments.
C'est peut-être aussi simple que cela func(&$myArgs)
, mais je suis presque sûr que ce n'est pas ça. Mais, malheureusement, le manuel php.net n'a rien divulgué jusqu'à présent. Non pas que je doive utiliser cette fonctionnalité particulière depuis environ un an.
$args = [1,2,3]; function(...$args){}
callable
, qui utilise le mêmecall_user_func_array
, uniquement avec un tableau où le premier élément est l'objet et le second est la méthode. Par exemplecall_user_func_array([$object, 'method'], $myArgs);
Comme cela a été mentionné , à partir de PHP 5.6+, vous pouvez (devriez!) Utiliser le
...
jeton (aka "splat operator", une partie de la fonctionnalité des fonctions variadiques ) pour appeler facilement une fonction avec un tableau d'arguments:Remarque: les éléments du tableau sont mappés aux arguments par leur position dans le tableau et non par leurs clés.
Selon le commentaire de CarlosCarucce , cette forme de déballage d'arguments est de loin la méthode la plus rapide dans tous les cas. Dans certaines comparaisons, c'est plus de 5 fois plus rapide que
call_user_func_array
.De côté
Parce que je pense que c'est vraiment utile (mais pas directement lié à la question): vous pouvez taper le paramètre d'opérateur splat dans votre définition de fonction pour vous assurer que toutes les valeurs passées correspondent à un type spécifique.
(N'oubliez pas que cela DOIT être le dernier paramètre que vous définissez et qu'il regroupe tous les paramètres passés à la fonction dans le tableau.)
C'est idéal pour s'assurer qu'un tableau contient des éléments d'un type spécifique:
la source
call_user_func_array
. Donc, si vous utilisez php 5.6+, je recommanderais celui-ci. Voici un test , qui a été cité dans le wiki officiel de phpNotez également que si vous souhaitez appliquer une méthode d'instance à un tableau, vous devez transmettre la fonction comme suit:
la source
$foo->bar()
exemple sur la page liée suggère qu'il devrait l'êtrearray($instance, "MethodName")
.call_user_func_array(array(parent, "__construct"), func_get_args());
Par souci d'exhaustivité, à partir de PHP 5.1, cela fonctionne également:
Voir: http://php.net/reflectionfunction.invokeargs
Pour les méthodes, vous utilisez ReflectionMethod :: invokeArgs à la place et passez l'objet comme premier paramètre.
la source