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] [Introspection] exécuter une méthode


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 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut [POO] [Introspection] exécuter une méthode
    Bonjour,

    j'ai commencé à écrire une classe assez simple et dans une des méthodes je voudrais pouvoir faire éxecuter des autres méthodes de façon dynamique.

    Voici une partie de la classe en question:
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <?php
     
    class InscriptionModel {
     
        private $results;
        private $errors;
     
        public function __construct() {
            $this->initResults();
            $this->initErrors();
        }
     
        public function check() {
            foreach($this->errors as $key => $value) {
                if(!$value) {
                    ///echo $key.'<br />';
                    $fct = new ReflectionMethod('isValidPseudo');
                    $fct->invoke();
                }
            }
        }
     
        private function initResults() {
            $this->results = array("isValidPseudo" => "",
    						"isExistingPseudo" => "",
    						"isValidPassword" => "",
    						"isSamePassword" => "",
    						"isValidEmail" => "",
    						"isSameEmail" => "",
    						"isExistingEmail" => "",
    						"isCorrectSex" => "",
    						"isValidBirthday" => "",
    						"isValidDepartement" => "",
    						"isAcceptedPolicy" => "",
    						"isAcceptedCGU" => "",
    						"isMajor" => "");
        }
     
        private function initErrors() {
            $this->errors = array("isValidPseudo" => false,
    						"isExistingPseudo" => false,
    						"isValidPassword" => false,
    						"isSamePassword" => false,
    						"isValidEmail" => false,
    						"isSameEmail" => false,
    						"isExistingEmail" => false,
    						"isCorrectSex" => false,
    						"isValidBirthday" => false,
    						"isValidDepartement" => false,
    						"isAcceptedPolicy" => false,
    						"isAcceptedCGU" => false,
    						"isMajor" => false);
        }
     
        private function isValidPseudo() {
            echo 'isValidPseudo<br />';
            /****************************************************
             * vérification de la validité du pseudo 			*
             * **************************************************/
     
        }
    }
    ?>
    Tout se passe dans la méthode check().

    Je souhaite appeler les diverses méthodes de la classe selon les valeurs du tableau $errors.
    Dans le code que je poste, j'ai mis en dur le nom de la méthode que je veux appeler, mais que je la mette comme ça, ou en utilisant la valeur $key, ça ne marche pas.
    J'ai le message suivant dans le navigateur :
    Fatal error: Uncaught exception 'ReflectionException' with message 'Invalid method name isValidPseudo' in D:\Dev_Web\nm1\app\models\InscriptionModel.php:17 Stack trace: #0 D:\Dev_Web\nm1\app\models\InscriptionModel.php(17): ReflectionMethod->__construct('isValidPseudo') #1 D:\Dev_Web\nm1\www\index.php(4): InscriptionModel->check() #2 {main} thrown in D:\Dev_Web\nm1\app\models\InscriptionModel.php on line 17
    Je suis preneur de toute idée, parceque là, je coince.
    Merci d'avance.

  2. #2
    Membre chevronné
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par défaut
    Tu as une erreur dans ta classe ReflectionMethod(), vu qu'on a pas le code sous les yeux impossible de t'aider.
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 194
    Par défaut
    y a plus simple pour appeler une fonction dont le nom est dans une variable:
    http://php.benscom.com/manual/fr/fun...-functions.php
    ou alors tout simplement eval ()

    je crois que l'erreur vient du fait que ReflectionMethod cherche une fonction globale et non une methode
    InscriptionModel :: isValidPseudo
    ou this->isValidPseudo

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut
    Citation Envoyé par genova
    Tu as une erreur dans ta classe ReflectionMethod(), vu qu'on a pas le code sous les yeux impossible de t'aider.
    Cette classe est une classe native de PHP(5?) on peut donc penser qu'il n'y a pas d'erreur dans son code.

    L'erreur c'était tout simplement que j'avais mal lu la doc de cette fonction, elle prend un argument. Ici il fallait que je lui passe (et c'est logique) l'objet sur lequel appeler la méthode.
    donc en l'occurence
    Merci à vous deux pour vos contributions.

    PS: coca25, je regarde le lien que tu m'as donné, ça peut en effet servir.

    [EDIT] coca25, oui, c'est nettement plus adapté à ce que je veux faire, merci du tuyau

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

Discussions similaires

  1. [POO] appel d'une méthode d'un autre fichier, le tout objet
    Par aaaaaaaa dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/07/2007, 18h43
  2. [POO] Héritage d'une méthode getInstance ?
    Par knocc dans le forum Langage
    Réponses: 4
    Dernier message: 13/02/2007, 19h47
  3. Réponses: 2
    Dernier message: 26/01/2007, 10h50
  4. [C#] Exécuter une méthode apsx.cs depuis un ascx
    Par bendj dans le forum ASP.NET
    Réponses: 12
    Dernier message: 12/07/2005, 11h18
  5. [Reflection] Exécuter une méthode donnée d'une classe
    Par schousso dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/06/2004, 10h35

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