Comment passer un nombre variable d'arguments à une fonction PHP
J'ai une fonction PHP qui prend un nombre variable d'arguments (à l'aide de func_num_args()
et func_get_args()
), mais le nombre d'arguments, j'ai envie de passer à la fonction dépend de la longueur d'un tableau. Est-il un moyen de appel une fonction PHP avec un nombre variable d'arguments?
- Vérifier ma réponse pour se renseigner sur un splat opérateur en nouvelle-php5.6: stackoverflow.com/a/23163963/1090562
Vous devez vous connecter pour publier un commentaire.
Si vous avez vos arguments dans un tableau, vous pourriez être intéressé par le
call_user_func_array
fonction.Si le nombre d'arguments que vous souhaitez passer dépend de la longueur d'un tableau, cela signifie probablement que vous pouvez emballer dans un tableau d'eux-mêmes -- et l'utiliser pour le deuxième paramètre de
call_user_func_array
.Éléments de ce tableau vous passe va être reçu par votre fonction de différents paramètres.
Par exemple, si vous avez cette fonction :
Vous pouvez emballer vos paramètres dans un tableau, comme ceci :
Et, ensuite, appelez la fonction :
Ce code de sortie :
c'est à dire, 3 paramètres ; exactement comme si la fonction a été appelée de cette façon :
C'est maintenant possible avec PHP 5.6.x, à l'aide de l'opérateur " ... " (aussi connu comme splat opérateur dans certaines langues):
Exemple:
Dans une nouvelle Php 5.6, vous pouvez utiliser
... operator
au lieu d'utiliserfunc_get_args()
.Donc, avec cela, vous pouvez obtenir tous les paramètres que vous passez:
Depuis PHP 5.6, une liste d'arguments variable peut être spécifié avec le
...
opérateur.Comme vous pouvez le voir, le
...
opérateur recueille la liste variable d'arguments dans un tableau.Si vous avez besoin de passer la variable d'arguments à une autre fonction, la
...
peut encore vous aider.Depuis PHP 7, la liste variable d'arguments peut être forcé à être tous du même type trop.
Pour ceux qui recherchent un moyen de le faire avec
$object->method
:J'ai eu du succès avec ce dans une construction de la fonction qui appelle une variable method_name avec des paramètres variables.
$object->method_name(...$array);
Vous pouvez tout aussi bien l'appeler.
De sortie:
Array ( [0] => bla ) Array ( [0] => bla [1] => bla )
Je suis surpris que personne ici n'a parlé simplement de passage et extraiting un tableau. E. g:
Bien sûr, cela ne donne pas la validation d'arguments.
Pour cela, n'importe qui peut utiliser ma fonction d'attente: https://gist.github.com/iautomation/8063fc78e9508ed427d5
Une vieille question, je sais, cependant, aucune des réponses ici vraiment faire un bon travail de simplement répondre à la question.
J'ai juste joué un peu avec php et la solution ressemble à ceci:
Cette fonction peut faire deux choses:
Si elle est appelée avec un seul paramètre requis:
myFunction("Hi")
Il apparaîtra à l'impression "Salut par défaut"
Mais si elle est appelée avec le paramètre facultatif:
myFunction("Hi","me")
Il va print "Salut moi";
J'espère que cela aide quelqu'un qui est à la recherche de ce bas de la route.
Voici une solution à l'aide de la méthode magique __invoquer
(Disponible depuis php 5.3)
De l'intérieur même de la classe:
À partir d'une instance d'un objet:
call_user_func_array
comme l'a déclaré haut voté réponse en 2009. Peut-être il ya un point à l'enchaînement d'un extra__invoke
autour d'elle mais je ne la vois pas.