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] Problème de OOP et get_class


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 14
    Par défaut [POO] Problème de OOP et get_class
    Voici mon problème :

    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
     
    <?   
     
     
      class Arbre {
     
        var $name = null;
     
         function __construct() {
           if($this->name == null) {
              $this->name = (get_class($this));
           }
         }
     
         function select() {     
           echo "appel de la méthode select à partir de : ". get_class()."<br />";
           print_r(debug_backtrace());
         }
      }
     
      class Feuille extends Arbre {
     
    	   function __construct() {
           		parent::__construct();
         }
     
      }
     
     
      Arbre::select();    // Affiche "appel de la méthode select à partir de : Arbre"
      Feuille::select();  // Affiche "appel de la méthode select à partir de : Arbre"
                          // J'aimerais que ça affiche ceci :
                          // Affiche "appel de la méthode select à partir de : Feuille"
     
     
     
    ?>
    Si jamais vous avez une idée... Je suis preneur.

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Par défaut
    Si tu veux que sa t'affiche Feuille au lieu de arbre tu dois simplement redéfinir la méthode select dans ta classe Feuille

    Comme ça sa marche:

    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
    <?   
     
     
      class Arbre {
     
        var $name = null;
     
         function __construct() {
           if($this->name == null) {
              $this->name = (get_class($this));
           }
         }
     
         function select() {     
           echo "appel de la méthode select à partir de : ". get_class()."<br />";
           //print_r(debug_backtrace());
         }
      }
     
      class Feuille extends Arbre {
     
           function __construct() {
                   parent::__construct();
         }
     
          function select(){
              echo "appel de la méthode select à partir de : ". get_class()."<br />";
          }
     
      }
     
     
      Arbre::select();    // Affiche "appel de la méthode select à partir de : Arbre"
      Feuille::select();  // Affiche "appel de la méthode select à partir de : Arbre"
                          // J'aimerais que ça affiche ceci :
                          // Affiche "appel de la méthode select à partir de : Feuille"
     
     
     
    ?>
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

  3. #3
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 14
    Par défaut
    Justement, mon objectif est de ne pas avoir de méthode select() dans la classe Feuille

  4. #4
    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
    Citation Envoyé par [url=http://us2.php.net/get_class]La doc php[/url]
    get_class -- Retourne la classe d'un objet
    Or quand tu fais :
    Il est où l'objet, l'instance ?

  5. #5
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Par défaut
    Très juste Mr N.! Mais je viens de tester et sa ne change rien... Apparement la méthode get_class retourne uniquement le nom de la classe qui contient véritablement la fonction et non pas le classe qui en hérite.
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

  6. #6
    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
    Non ce n'est pas ça le problème.

    Quand tu fais :
    Tu appelles une méthode de classe (ou statique) or dans une méthode de classe, il n'y a pas d'objet, pas d'instance. Donc pas de $this, pas de get_class()

    Par contre, avec ce code ça marchera, puisqu'on utilise une méthode d'instance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    class A {
      function select() {
         echo "Ma classe est ".get_class($this)." <br />\n";
      }
    }
    class B extends A  {}
     
    $a = new A();
    $a->select();
     
    $b = new B();
    $b->select();
    ?>
    Ce qui produit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Ma classe est a <br />
    Ma classe est b <br />

Discussions similaires

  1. [POO] Problème avec l'utilisation de classes.
    Par sekiryou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 18h54
  2. [POO] Problème de code PHP avec Internet Explorer
    Par bzoler dans le forum Langage
    Réponses: 5
    Dernier message: 12/02/2006, 11h00
  3. [AS2] [POO] Problème de duplication d'un MovieClip
    Par segphault dans le forum ActionScript 1 & ActionScript 2
    Réponses: 5
    Dernier message: 11/01/2006, 15h44
  4. [POO] Problème de paramètre passé par référence
    Par dug dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/08/2005, 20h29
  5. [POO] Problème lors de l'appel d'une propriété d'un objet.
    Par akecoocoo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/08/2005, 08h51

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