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 :

[POO] nom d'une fonction à executer en argument du constructeur ?


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut [POO] nom d'une fonction à executer en argument du constructeur ?
    Bonjour à tous,

    comme l'indique le nom du Post je cherche à passer le nom d'une fonction à executer en argument du constructeur d'une classe.

    Voici un exemple ou le nom de la fonction à executer ("payer") est fourni par un formulaire (Submit="payer").

    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
    25
    26
    27
     
     
    <body>
    <?php
    class transaction
    {
    private $fonction;
     
    public function __construct($fonction){
     $this->fonction=$fonction;
     // ICI JE VOUDRAIS QUE SOIT EXECUTEE LA FONCTION payer()
     }
     
    private function payer(){
    echo '<script>alert("il faut payer")</script>';
    }
    };
     
     
    if(isset($_POST['Submit'])){
    $transaction=new transaction($_POST['Submit']);
    }
    ?>
    <form action="test.php" method="post">
    <input name="Submit" type="submit" value="payer" />
    </form>
    </body>
    j'ai essayé sans succès avec :

    call_user_func($this->fonction);

    Quelqu'un peut-il m'aider à trouver la bonne syntaxe ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Ou si tu as envie de garder la propriété de ton objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->{$this->fonction}();

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Bonjour et merci de ta réponse

    En faisant un nouvel essai j'ai trouvé ceci qui marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function __construct($fonction){
     $this->fonction=$fonction;
     call_user_func(array($this, $fonction));
     }
    Qu'en penses-tu ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Il semble que ma méthode ne permette pas de passer des arguments à ma fonction

    alors que la tienne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->{$this->fonction}();
    devrait permettre d'en passer dans la parenthèse, non ?

  5. #5
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Tu peux aussi passer des paramètres dans ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call_user_func(array($this, $fonction), 'valeurparam1', 'valeurparam2');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private function payer($param1, $param2){
     
    }
    Mais cette méthode est quand même moins lisible, intuitive et fait appel à une nouvelle fonction.
    De plus, si la syntaxe permet de pouvoir appeler des fonctions dynamiquement sans avoir à se casser la tête, pourquoi s'en priver.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    C'est vrai

    Merci encore, j'ai maintenant plusieurs solution pour arriver à mes fins

    Je mets le tag "resolu"

    Bonne journée à tous

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/01/2007, 05h46
  2. Réponses: 4
    Dernier message: 07/11/2006, 11h28
  3. Réponses: 14
    Dernier message: 16/05/2006, 11h26
  4. [Tableaux] Oubli du nom d'une fonction
    Par Ekimasu dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2006, 10h50
  5. Réponses: 3
    Dernier message: 06/11/2005, 18h02

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