Conditionner l'appel à une fonction

Fermé
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 - 25 déc. 2008 à 14:34
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 - 27 déc. 2008 à 11:22
Bonjour,

J'essaie actuellement de changer ma façon de coder pour rendre mon travail plus rapide et plus simple à effectuer. Ca implique des recherches dans différentes directions, or il se trouve que la direction que j'ai prise dernièrement m'oppose à un obstacle de taille, dont je ne saurais me défaire.

Voilà:
j'ai besoin de pouvoir rentrer une fonction dans un argument d'une autre fonction, ce qui fonctionne très bien, mais j'ai surtout besoin que la fonction-argument ne soit pas déclenchée lors de l'appel de la fonction-fonction, mais durant l'exécution de cette dernière.
Jusqu'à maintenant, mes scripts exécutent toujours la fonction-argument quand j'appelle la fonction-fonction,

Comment faire pour éviter ça?

Cordialement,

Smoke

PS: je code en php^^

3 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 déc. 2008 à 14:42
Bonjour,


function fonction1(a,b,c,d){

///actions diverses

fonction1(d);//appel de la fonction 2
//autres actions

}

function fonction2(d){
//actions ...

}


et l'appel:

$result=fonction1('toto','babab','jiji','alpha');
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
25 déc. 2008 à 14:58
Je ne comprends pas ton code :s...

Voici comment le mien fonctionne:

chaque fonction contient un type, un titre, un corps, et une fonction de traitement
function exemple(){
   $fTitre='Titre';
  $fType='none'; //indique si le formulaire envoi des fichiers ou non
   $fCorps.='corps...'; //description du formulaire

        function eTraitement() {
         //instructions de traitement du formulaire
        }
   $bck->formed(eTraitement(),$fType,$fTitre,$fCorps);
}


$bck est l'instanciation de la classe bck
function formed($traitement,$type,$titre,$corps) {
    		echo "<div class='eachForm'>\n";
		echo "<p class='analyse'>";
		$trigger=$_GET['trigger']; $ref=$_GET['ref'];
         //je voudrais que la fonction enregistrée dans l'argument $traitement ne s'exécute qu'à partir d'ici, j'ai l'impression que c'est ce que tu tentes de m'expliquer dans ton bout de code, mais j'arrive pas à comprendre :s
               $traitement;
		echo "</p>\n";
		echo "<form action='' method='post'";
		echo ($type=='download') ? " enctype='multipart/form-data' " : "";
		echo ">\n";
		echo "<p class='bckTitre'>$titre</p>\n";
		echo "<p class='bckTexte'>\n$corps\n";
		echo (preg_match('/aucun| ne peut /i',$corps)) ? '' : "<input type='submit' class='enregistrer' value='Envoyer' />";
		echo "</p>\n</form>";
		echo "</div>";
}
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 déc. 2008 à 18:33
il ne faut pas mettre deux fonctions l'une dans l'autre mais les séparer et mettre l'appel de la deuxième fct dans la première

//fonction 1
function exemple(){
   $fTitre='Titre';
  $fType='none'; //indique si le formulaire envoi des fichiers ou non
   $fCorps.='corps...'; //description du formulaire
		eTraitement(); //appel fonction 2
        
   $bck->formed(eTraitement(),$fType,$fTitre,$fCorps);
}
//fonction 2
function eTraitement() {
         //instructions de traitement du formulaire
        }
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
27 déc. 2008 à 11:22
J'ai fait le test, je les ai séparées comme tu l'as montré, mais ça ne change rien: toujours pas moyen de faire s'exécuter la fonction pendant l'exécution de $bck->formed.

Je crois que je pourrais conserver les traitements séparés de leurs fonction, et inclure un switch à formed, avec une variable indiquant quel formulaire a été appellé. Du coup, l'exécution du traitement se ferait au moment qui m'intéresse, mais ça veut dire qu'il me faudra retoucher la fonction formed à chaque écriture de fonction, ce qui ne correspond pas à mes objectifs de réduction de travail et de lisibilité (:

As-tu d'autres idées?
0