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 :

pointeur sur fonction


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut pointeur sur fonction
    Bonjour,

    je cherche un truc tout nul surement mais jvois pas....

    j'ai une classe dans laquelle je veux faire passer une 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
    17
    18
    19
    20
    21
     
    <?
     
    class Test{
        var $pfunc;
     
        function setFunction($pfunc) {
            $pfunc("TEST 1");
            $this->pfunc = $pfunc;
            $this->pfunc("TEST 2");
        }
    }
     
    function affichage($txt){
        echo $txt . "<br>";
    }
     
    $test = new Test;
     
    $test->setFunction("affichage");
    ?>
    avec ce code, j'obtiens :
    TEST 1

    Fatal error: Call to undefined function: pfunc() in /home/public_html/test.php on line 9
    la ligne 9 est : $this->pfunc("TEST 2");

  2. #2
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Je te propose ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        function setFunction($p) {
            $p("TEST 1");
            $this->pfunc = $p;
     
            $f = $this->pfunc;
            $f("TEST 2");
        }

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    Hey !

    ca a l'air de fonctionner, c'est bizzare ca ...

    c'est du à quoi à ton avis ?

  4. #4
    Membre chevronné Avatar de XtofRoland
    Profil pro
    Inscrit en
    Août 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 357
    Par défaut
    j'ai essayé mais sans resultats ;-)

    intuitivement je tenterai du code de ce type:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    <? 
     
    class Test{ 
        var $pfunc; 
     
        function setFunction($pfunc) { 
            $pfunc("TEST 1"); 
     
    		global ${$pfunc."()"};
     
            $this->pfunc = ${$pfunc.'($str)'}; 
     
            $this->pfunc("TEST 2"); 
        } 
    } 
     
    function affichage($txt){ 
        echo $txt . "<br>"; 
    } 
     
    $test = new Test; 
     
    $test->setFunction("affichage"); 
    ?>
    il existe des function php create function...

    pas terrible comme aide mais je ne peux faire mieux.

  5. #5
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Une autre solution plus propre à mon gout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        function setFunction($p) {
            $p("TEST 1");
            $this->pfunc = $p;
     
            call_user_func($this->pfunc, "TEST 2");
        }

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    je vous remercis à tous les 2,

    les 2 soluce de Mr N. fonctionnent bien, jprefere la 2nd avec call_user_func, jla trouve plus ... nickel

  7. #7
    Membre chevronné Avatar de XtofRoland
    Profil pro
    Inscrit en
    Août 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 357
    Par défaut
    elle me reservira aussi, je l'ai deja copié collé en lieu sur ;-)

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 03/02/2005, 14h09
  2. Réponses: 5
    Dernier message: 12/01/2005, 21h58
  3. pointeurs sur fonction en C++
    Par cemoi dans le forum C++
    Réponses: 7
    Dernier message: 29/11/2004, 14h19
  4. [langage] Pointeur sur fonction
    Par Fanch.g dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2004, 11h43
  5. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 20h37

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