IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Transfert d'arguments


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut [Tableaux] Transfert d'arguments
    Bonjour,

    J'ai un appel de fonction à laquelle je passe un nombre variable de paramètres (min 2, max ?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function fonc1()
    {
    ...
    }
     
    ...
    fonc1($arg1, $arg2, $arg3, $arg4...)
    ...
    Je sais les récupérer via func_arg... mais j'aimerais, en fait pouvoir transférer certains arguments (du 3ème au nième) à une autre sous fonction. Si le nombre d'arguments étaient fixes, je pourrais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function fonc1($a, $b, $c, $d, $e)
    {
    ...
    fonc2($c, $d, $e);
    ...
    }
    Or, là, je ne sais pas combien il y aura d'arguments à récupérer ($c, $d, $e, $f...)

    Comment transférer les arguments à la sous fonction alors que je n'en connait pas le nombre ?
    Actuellement, je passes les arguments via un tableau mais je pense qu'il doit bien exister une solution qui me permettrait de passer directement les arguments dans l'appel de fonc1.

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    495
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 495
    Points : 396
    Points
    396
    Par défaut
    il me semble que l'option de passer tes variables dans une array est le plus simple..
    sinon, tu peux declarer ta fonction ainsi..
    function Mafonction($var1='', $var2='', $var3='', ....

    le ='' indique que le parametre n'a pas forcement besoin d'etre renseigné.. mais faut quand meme connaitre les noms de tous les parametres susceptibles d'etre passés a la fonction..

  3. #3
    Membre éprouvé Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Points : 1 009
    Points
    1 009
    Par défaut
    Tu en fais une chaine de caratère du style "a=$a&b=$b&c=$c". Ensuite tu déplies cette chaine avec parse_str() dans ta deuxième fonction...

  4. #4
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    Merci pour vos réponses.

    Citation Envoyé par macbook
    Tu en fais une chaine de caratère du style "a=$a&b=$b&c=$c". Ensuite tu déplies cette chaine avec parse_str() dans ta deuxième fonction...
    Oui, j'avais vu ta réponse sur un post similaire.
    Mais si je parse, j'obtiens un tableau.

    Soit je mets directement le tableau en paramètre de la 2nde fonction et cela revient au même que de fournir un tableau (pour les parametres qui seront transmis) à la remière fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function fonc1($fixe1, $fixe2, $tabvariable)
    {
    ...
    fonc2($tabvariable);
    ...
    }
    Soit je reste sur le principe d'envoyer tous les paramètres à la chaine (sans array) : fonc1($a, $b, $c, $d, $e, $f,...);
    et je crée la chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ChaineParam = '';
    for($i = 3; $i < func_num_args(); $i++)
    {
       if($ChaineParam != '') $ChaineParam .= '&';
       $ChaineParam .= 'P' . $i . '=' . func_get_arg($i);
    }
    J'obtiens donc une chaine de la forme
    P3=aa&P4=bb&P5=cc&...
    Mais comment fais-tu pour la "déplier" dans l'appel à fonc2 pour obtenir quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    fonc2($c, $d, $e, $f,...);
    ...
    :

  5. #5
    Membre éprouvé Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Points : 1 009
    Points
    1 009
    Par défaut
    C'est la chaine qu'il faut passer en argument :

    <?php
    function2&#160;
    (&#160;$str&#160;)
    {
    parse_str&#160;(&#160;$str&#160;,&#160;$tab&#160;)&#160;;

    $var1&#160;=&#160;isset&#160;$tab[0]&#160;?&#160;$tab[0]&#160;:&#160;''&#160;;

    etc...

    }
    ?>

    Phpsyntaxcolor powered by decabodi.com
    Tu vois le principe ?

    Cette méthode permets de s'affranchir d'un nombre quelconque d'arguments, de leur donner une valeur par défaut, et de s'affranchir de l'ordre dans lequel il sont passé.

    Mais ce n'est pas non plus LA méthode passe-partout. A toi de voir.

  6. #6
    Membre actif Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Points : 224
    Points
    224
    Par défaut
    Cela revient donc à fournir, dès le début (l'appel à fonc1), un tableau pour les paramètres variables et de passer directement ce tableau à la sous fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function fonc1($var1, $var2, $tabvarx)
    {
    ...
    fonc2($tabvarx);
    ...
    }
     
    fonc2($tableau)
    {
    ...
    }
     
    // Initialisation des paramètres supplémentaires
    $donnees = array('cc', 'dd', 'ee', 'ff', 'gg', 'hh',...);
    // Appel de fonc1
    fonc1($a, $b, $donnees);
    C'est ce que j'ai utilisé jusqu'à présent mais j'espérais trouver une solution plus "souple".

    Enfin, tant pis.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajout injection pour tableaux, fonction en argument
    Par seb92400 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/10/2008, 13h48
  2. [Tableaux] Regrouper les arguments avec str_replace
    Par Gunner4902 dans le forum Langage
    Réponses: 2
    Dernier message: 17/03/2008, 18h51
  3. Réponses: 4
    Dernier message: 04/01/2008, 22h19
  4. Réponses: 11
    Dernier message: 19/05/2006, 12h41
  5. [Tableaux] Problème invalid argument foreach()
    Par kcizth dans le forum Langage
    Réponses: 9
    Dernier message: 05/01/2006, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo