Conditionner l'appel à une fonction

Smoking bird Messages postés 911 Statut Membre -  
Smoking bird Messages postés 911 Statut Membre -
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^^
Configuration: Windows XP
Opera 9.63

3 réponses

  1. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  2. Smoking bird Messages postés 911 Statut Membre 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
    1. Alain_42 Messages postés 5413 Statut Membre 904
       
      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
  3. Smoking bird Messages postés 911 Statut Membre 58
     
    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