12
votes

PHP - Tableau de passe en tant que liste d'arguments de longueur variable

J'ai un problème vraiment simple dans mon script PHP. Il existe une fonction définie qui prend Liste d'arguments de longueur variable forte>: xxx pré>

Quand j'appelle cela comme ça, ça marche aussi bien: P>

$my_args = array("hello", "world");
foo(do_some_stuff($my_args));


2 commentaires

Dupliqué possible de Passage d'un tableau en tant qu'arguments, pas un tableau , dans php


Utilisez cette réponse. Ceci est beaucoup plus précis. Stackoverflow.com/a/34049110/2147023


8 Réponses :


0
votes

1 commentaires

Non. J'ai déjà lu ceci. Toutes les fonctions sont censées fonctionner à l'intérieur ma fonction "foo". J'ai besoin de diviser les arguments avant qu'ils ne soient passés à la fonction.



2
votes

Cela me semble que vous recherchez call_user_func_array .


2 commentaires

Merci pour la réponse, c'est exactement ce dont j'ai besoin. Cependant, je ne peux accepter qu'une seule réponse.


Acceptez simplement celui qui donne soit le détail le plus nécessaire, ou le plus tôt :)



6
votes

Eh bien, vous avez besoin call_user_func_array xxx

http://php.net/manual/fr/funck.Call-user-func-array.php


1 commentaires

Merci pour la réponse, c'est exactement ce dont j'ai besoin. Cependant, je ne peux accepter qu'une seule réponse.



17
votes

1 commentaires

+1 pour réflexion s. Bien que ce soit comme une surkillée ici, mais c'est toujours cool de traiter avec eux!



0
votes

Si vous pouvez modifier le code de foo () code> Il doit être facile de résoudre ce problème dans un seul endroit.

function foo()
{
    $args = func_get_args();
    if(count($args) == 1 && is_array($args[0]))
    {
        $args = $args[0]
    }
    // use $args as normal
}


2 commentaires

Cela ne fonctionne pas s'il veut passer un tableau (pour réel) comme premier argument.


Non, cela ne fonctionne pas s'il n'y a qu'un seul argument et que cet argument est censé être un tableau. S'il y a plus d'un argument, ils sont tous laissés seuls.



3
votes

Vous recherchez call_user_func_array () code>.

http://it2.php.net/ Manuel / fr / Function.Call-User-Func-Array.php P> blockQuote>

Utilisation: P>

$my_args = array("hello", "world");
call_user_func_array('foo', $my_args);

// Equivalent to:
foo("hello", "world");


1 commentaires

C'est bien mieux que d'utiliser la réflexion à mon avis



0
votes

Cette solution n'est pas recommandée du tout, mais il suffit de montrer une possibilité:

en utilisant eval

eval ("foo ('". Implode ("'", '", $ args_array)."') "" "


1 commentaires

Je sais que ce n'est que "montrant une possibilité", mais toujours ... c'est Eval. ;)



0
votes

Je sais que c'est une vieille question mais elle apparaît toujours comme le premier résultat de la recherche - alors voici un moyen plus facile; xxx

Source: https://www.php.net/manual/fr/ fonctions.arguments.php # Exemple-142


0 commentaires