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 :

Accéder à une méthode dynamiquement via un objet


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 74
    Points : 67
    Points
    67
    Par défaut Accéder à une méthode dynamiquement via un objet
    Bonjours à tous

    j'essaie de construire une méthodeget () via un paramètre entré par l'utilisateur, ie



    j'ai un 'objet inventeur qui a plusieurs propriétés comme nom prénom âgé, et à chaque fois pour récupérer une propriété on fait
    $inventeur->getNomInventeur()
    $inventeur->getPrenomInventeur()
    $inventeur->getAgeInventeur()

    alors dans mon cas je veux laisser l'utilisateur choisir ce qu'il veut afficher
    display content(string $property)
    $get="get".$property."()";

    $inventeur->$get()
    Donc l'appelle sera :
    display content("NomInventeur");
    Mais ça ne marche pas
    Voilà le code
    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
     
    public function displayContent(string $property){
     
            $result = $this->pdo->prepare($query);
            $result->execute();
            $inventeurs = $result->fetchAll(PDO::FETCH_CLASS, Inventeur::class);
     
    $get = "get" . $property . "()"; // va donner par exemple getNom_inventeur()
     
    foreach ($inventeurs as $inventeur) {
     
     
    echo  $inventeur->$get;          //Undefined property: App\Model\Inventeur::$getNom_inventeur()
    //echo  $inventeur->{$get};          //Même erreur
    //echo  $inventeur->{'getNom_inventeur'};          //Même erreur
     
    //echo $inventeur->getNom_inventeur()  //Marche bien
    }
    }
    et lorsque j'écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $inventeur->getNom_inventeur()
    m'affiche bien un résultat

    mais lorsque je concatène la propriété pour construire la methode getProperty() j'ai cette erreur
    Undefined property: App\Model\Inventeur::$getNom_inventeur()
    dans la class Inventeur j'ai cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        /**
         * Get the value of nom_inventeur
         */
        public function getNom_inventeur(): string
        {
            if ($this->nom_inventeur != null) {
                return $this->nom_inventeur;
            } else {
                return "---";
            }
        }
    Merci en avance

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    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
    class Inventeur
    {
        private $nom = 'Michel';
        private $prenom = 'Philippe';
        private $age = 54;
     
     
        public function getNom() {
            return $this->nom;
        }
     
        public function getPrenom() {
            return $this->prenom;
        }
     
        public function getAge() {
            return $this->age;
        }
    }
     
    $inv = new Inventeur;
     
    $property = 'Prenom';
    $method = "get$property";
     
    echo $inv->$method();

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    Alternative sans variable intermédiaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $inv = new Inventeur;
    $property = 'Prenom';
    echo $inv->{'get' . $property}();

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 74
    Points : 67
    Points
    67
    Par défaut Résolu
    Génial, parfait, merveilleux, quoi d'autre

    Merci beaucoup CosmoKnacki

    Merci beaucoup Séb


    Donc on a deux solution qui marche bien , super

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $method = "get$property"; //je ne savais pas que Php peut interpréter une variable qui se trouve dans une chaine de caractère8O
    echo $inv->$method();
    Et


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $inv->{'get' . $property}();

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/12/2013, 13h29
  2. [Reflection] Lancer dynamiquement une méthode donnée d'un objet
    Par Diablo_22 dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 06/09/2007, 10h21
  3. créer une méthode dynamique delphi
    Par ougueye dans le forum Delphi
    Réponses: 4
    Dernier message: 09/04/2007, 15h33
  4. Accéder à une méthode depuis un form
    Par the java lover dans le forum Windows Forms
    Réponses: 8
    Dernier message: 06/03/2007, 22h36
  5. Appeler une méthode dynamiquement
    Par doof dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/01/2005, 00h15

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