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 :

Héritage de classe


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de Kokito
    Homme Profil pro
    Inscrit en
    Février 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2004
    Messages : 78
    Points : 56
    Points
    56
    Par défaut Héritage de classe
    Bonjour à tous

    Ayant fait une belle pause niveau Programmation Objet, je bloque sur un truc sûrement tout bête

    Même si j'ai une solution de contournement, je voudrais quand même vous demander ce qui cloche sur mon 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    class mere {
    	public function __construct( ){
    		$this->Test( );
    	}
     
    	protected function Test( ){
    		echo 'mere';
    	}
    }
     
    class fille extends mere {
    	public function __construct( ){
    		parent::__construct( );
    		$this->Test( );
    	}
     
    	protected function Test( ){
    		echo 'fille';
    	}
    }
     
    class fifille extends mere {
    	public function __construct( ){
    		parent::__construct( );
    		$this->Test( $test );
    	}
     
    	protected function Test( ){
    		echo 'fifille';
    	}
    }
     
    $test = new fifille( );
    Voilà, j'ai un classe mère, une fille et une fifille. Je voudrais que la fonction Test() s'exécute dans la classe mère, la classe fille et la classe fifille.
    Malheureuseument, elle s'exécute 3 fois dans la classe fifille.

    Je pensais que le "this" dans la classe mère appelerait le Test de la classe mère mais non.

    Si je surcharge la méthode Test(), ça appelle 3 fois la méthode de la classe mère.

    Bon, c'est pas sorcier à contourner mais ça me trotte dans la tête donc ça m'énerve

    Merci de votre aide

    Bonne journée
    Protégeons la couche d'eau jaune

  2. #2
    Membre du Club Avatar de Kokito
    Homme Profil pro
    Inscrit en
    Février 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2004
    Messages : 78
    Points : 56
    Points
    56
    Par défaut
    Oh bordel, j'ai cherché toute la matinée et j'ai trouvé lorsque j'ai posté ce message ...

    Je remplace tout simplement le this->Test() par self::Test()

    Suis désolé d'avoir fait mon noob et vous souhaite encore une bonne journée

    Mes excuses
    Protégeons la couche d'eau jaune

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Citation Envoyé par Kokito Voir le message
    Je pensais que le "this" dans la classe mère appellerait le Test de la classe mère mais non.
    En POO, cela correspond au concept de polymorphisme.

    Je ne voudrais pas dire mais c'est sacrément bancal ton architecture.
    Tu ne dois pas mélanger les appels statiques à des fonctions dans une classe instanciée : des $this avec des self::, voici comment j'aurais fait :
    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
    <?php 
     
    class mere 
    {
        public function __construct()
        {
            $this->Test();
        }
     
        protected function Test()
        {
            echo 'mere';
        }
    }
     
    class fille extends mere 
    {
        protected function Test()
        {
            parent::Test();
            echo 'fille';
        }
    }
     
    class fifille extends mere 
    {
        protected function Test()
        {
            parent::Test();
            echo 'fifille';
        }
    }
     
    $test = new fifille();
    En conservant ton approche, faut reconnaître que ça reste un rien bancal mais c'est déjà plus propre.
    Persévère

  4. #4
    Membre du Club Avatar de Kokito
    Homme Profil pro
    Inscrit en
    Février 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2004
    Messages : 78
    Points : 56
    Points
    56
    Par défaut
    Hello rawsrc,

    Merci de ton conseil

    Je suis totalement conscient que la conception est assez bancale, j'essaye de monter une architecture de classes avec une grand-mère, une dizaine de filles et une centaines de petites-filles.

    J'essaye donc de faire en sorte que tout soit le plus dynamique possible, à savoir que lorsque je fais une nouvelle petite-fille, il faut que j'ai le moins de choses à modifier à part les attributs, pour éviter les boulettes

    Bon, c'est pas facile à expliquer

    Encore merci, je vais modifier mon code comme tu me l'as suggéré

    Edit : modifications faites, c'est quand même vachement plus clair et plus propre, encore merci
    Protégeons la couche d'eau jaune

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

Discussions similaires

  1. conflit d'inclusions et Héritage de classe
    Par gedeon555 dans le forum C++
    Réponses: 7
    Dernier message: 01/10/2006, 19h48
  2. [POO] Problème héritage des classes PHP4
    Par zana74 dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2006, 16h00
  3. Héritage de classes.
    Par Berzerk_ dans le forum C++
    Réponses: 48
    Dernier message: 13/08/2006, 23h48
  4. [POO] Héritage vs classe dans une classe
    Par robichou dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2006, 23h51
  5. [OO] Héritage - Mixins Classes
    Par djmalo dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 01/03/2005, 23h16

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