Fonctions, question de syntaxe

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonctions, question de syntaxe

par FredoMkb » 05 juin 2007, 12:46

Sinon tu peux aussi utiliser les fonctions du type func_get_args()...
Ha oui, ça semble intéressant en effet... je vais étudier cette possibilité, merci pour cette piste :)
Mais perso je trouve ça plus lourd et moins évident à gérer et à reprendre ou à maintenir...
Je vais voir ce qu'il en est, mais si comme tu le dis ça devient trop lourd, je vais préférer une solution avec un simple tableau...

Merci... je vous tiens au courant dès que j'ai quelque chose de pas trop mal... à+ :)

par Ryle » 05 juin 2007, 12:27

Sinon tu peux aussi utiliser les fonctions du type func_get_args() pour récupérer les arguments que tu passes pour avoir un nombre d'arguments non limités, mais le problème sera alors de savoir à quel élément correspond quelle valeur... On peut alors envisager de passer des tableaux associatifs, des chaines à découper ou à évaluer, ou autre qu'il te suffit ensuite de traiter :
function general() {  
  $argList = func_get_args();
  foreach ($argList as $arg) {
    eval($arg);
  }
  ...
}

general( '$arg2='.$valeur1, '$arg7='.$valeur2);
Mais perso je trouve ça plus lourd et moins évident à gérer et à reprendre ou à maintenir...

par FredoMkb » 05 juin 2007, 11:42

Bonjour :)
Utilises un tableau pour passer tes arguments :
Le tableau est je pense la solution la plus pratique en effet.. sinon tu peux donner une valeur par défaut aux paramètres de ta fonction pour que les "derniers" ne soient pas obligatoires.
J'ai en effet commencé à étudier une solution en utilisant un tableau pour passer les arguments, mais pour l'instant je ne suis pas trop satisfait du résultat que j'obtiens, mais je continue à explorer cette piste...

Pour ce qui est des valeurs par défaut sur les arguments de la fonction, c'est déjà le cas en fait (je ne l'ai pas précisé dans mon premier post), ce qui me permet en effet d'ignorer les derniers arguments vides, mais les arguments vides intermédiaires doivent quand-même être fournis, sous peine d'erreur...

Bref, je pensais qu'une syntaxe simple et directe pouvait exister... sinon, je continue à explorer une solution avec un tableau... je vous tiens au courant si je trouve quelque chose qui tient la route...

Merci à tous :)

par Ryle » 05 juin 2007, 11:09

Le tableau est je pense la solution la plus pratique en effet.. sinon tu peux donner une valeur par défaut aux paramètres de ta fonction pour que les "derniers" ne soient pas obligatoires. Mais tu seras quand même obligé de passer des valeurs vides entre 2 paramètres pour que ta fonction sache auquel correspond la valeur que tu passes.

Tu peux ainsi faire :
function general($arg1='', $arg2='', $arg3='', $arg4='', $arg5='', $arg6='', $arg7='', $arg8='', $argX='') { 
}

// appel de la fonction avec les arguments 1, 2 et 4, les suivants étant initialisés à vide.
general($a, $b, '', $c); 
Sinon tu peux envisager de faire une classe si tu t'y connais un peu en poo, ca serait l'idéal pour définir seulement quelques attributs :)

par Sékiltoyai » 05 juin 2007, 10:57

Utilises un tableau pour passer tes arguments :
function machin($args)
{
$truc = isset($args['truc'])?$args['truc']:'';
}

Fonctions, question de syntaxe

par FredoMkb » 05 juin 2007, 10:17

Bonjour à tous :)

Voici mon petit souci du jour...

Je dispose d'une fonction ayant un rôle un peu généraliste, que j'utilise très souvent dans le code de mon projet.

Seulement, cette fonction peut recevoir avec un bon nombre d'arguments (plus de 10), mais ils ne contiennent pas toujours des données, c'est selon les contextes et les besoins.

Par exemple :
function general($arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $arg7, $arg8, $argX) {
	// Différents traitements
}
Ok, ceci fonctionne bien, mais, vous l'aurez compris, je n'ai pas besoin de fournir tous les arguments à chaque fois, mais seulement 2 ou 3 habituellement, qui peuvent être évidemment n'importe lesquels.

Or, si jamais j'ai besoin par exemple de fournir les arguments $arg2 et $arg7 seulement, je suis obligé de mettre des valeurs vides pour tous les autres arguments intermédiaires lors de l'appel de la fonction, soit par exemple :
$resultat = general('',$valeur1,'','','','',$valeur2);
Donc, ma question est la suivante :

Connaîtriez-vous une solution pour ne pas avoir à mettre systématiquement des valeurs vides pour les arguments non nécessaires ?

L'idéal pour moi serait de pouvoir utiliser une syntaxe du type :
$resultat = general($arg2=$valeur1, $arg7=$valeur2);
Mais, malheureusement, cette syntaxe ne fonctionne pas, j'ai droit à une erreur de type "Warning : missing argument etc."...

Voilà, toute idée est la bienvenue... merci à tous :)