J'ai une fonction PHP qui prend un nombre variable d'arguments (en utilisant func_num_args()
et func_get_args()
), mais le nombre d'arguments que je veux transmettre à la fonction dépend de la longueur d'un tableau. Existe-t-il un moyen d' appeler une fonction PHP avec un nombre variable d'arguments?
php
variadic-functions
nohat
la source
la source
Réponses:
Si vous avez vos arguments dans un tableau, vous pourriez être intéressé par la
call_user_func_array
fonction.Si le nombre d'arguments que vous souhaitez transmettre dépend de la longueur d'un tableau, cela signifie probablement que vous pouvez les regrouper eux-mêmes dans un tableau - et utiliser celui-ci pour le deuxième paramètre de
call_user_func_array
.Les éléments de ce tableau que vous passez seront alors reçus par votre fonction en tant que paramètres distincts.
Par exemple, si vous avez cette fonction:
Vous pouvez regrouper vos paramètres dans un tableau, comme ceci:
Et, ensuite, appelez la fonction:
Ce code sera la sortie:
c'est-à-dire 3 paramètres; exactement comme si la fonction était appelée de cette façon:
la source
C'est désormais possible avec PHP 5.6.x , en utilisant l'opérateur ... (également connu sous le nom d'opérateur splat dans certaines langues):
Exemple:
la source
Dans un nouveau Php 5.6 , vous pouvez utiliser
... operator
au lieu d'utiliserfunc_get_args()
.Ainsi, en utilisant ceci, vous pouvez obtenir tous les paramètres que vous passez:
la source
Depuis PHP 5.6 , une liste d'arguments variables peut être spécifiée avec l'
...
opérateur.Comme vous pouvez le voir, l'
...
opérateur collecte la liste variable des arguments dans un tableau.Si vous devez passer les arguments de variable à une autre fonction, le
...
peut toujours vous aider.Depuis PHP 7 , la liste des variables des arguments peut être forcée à être toutes du même type aussi.
la source
Pour ceux qui recherchent un moyen de le faire avec
$object->method
:J'ai réussi avec cela dans une fonction de construction qui appelle une variable method_name avec des paramètres variables.
la source
$object->method_name(...$array);
$object->method_name(&...$args);
Vous pouvez simplement l'appeler.
Production:
Array ([0] => bla) Array ([0] => bla [1] => bla)
la source
Je suis surpris que personne ici n'ait mentionné le simple fait de passer et d' extraire un tableau. Par exemple:
Bien entendu, cela ne permet pas de valider les arguments . Pour cela, n'importe qui peut utiliser ma fonction expect: https://gist.github.com/iautomation/8063fc78e9508ed427d5
la source
Une vieille question, je sais, cependant, aucune des réponses ici ne fait vraiment un bon travail de répondre simplement à la question.
Je viens de jouer avec php et la solution ressemble à ceci:
Cette fonction peut faire deux choses:
S'il est appelé avec uniquement le paramètre requis:
myFunction("Hi")
il affichera "Salut par défaut"Mais s'il est appelé avec le paramètre optionnel:
myFunction("Hi","me")
il affichera "Salut moi";J'espère que cela aidera quiconque recherchera cela plus tard.
la source
Voici une solution utilisant la méthode magique __invoke
(Disponible depuis php 5.3)
De l'intérieur de la même classe:
À partir d'une instance d'un objet:
la source
call_user_func_array
comme indiqué par la réponse la plus votée en 2009. Peut-être qu'il est utile d'envelopper un supplément__invoke
- mais je ne le vois pas.