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] Héritage qui ne fonctionne pas


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de eexit
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 61
    Par défaut [POO] Héritage qui ne fonctionne pas
    Bonjour,

    J'ai un petit soucis d'héritage... Je n'ai pas énormément d'expérience en terme de POO mais là j'avoue que je ne comprends pas pourquoi ça ne fonctionne pas.

    Voici l'exemple:
    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
    <?php
    class Foo {
    	protected $foo;
    	protected $tata = 'titi';
    	public $bar;
     
    	function _init() {
    		$this->foo = 'toto';
    		$this->bar = new Bar;
    	}
    }
     
    class Bar extends Foo {
    	public $baz;
    	public $baz2;
     
    	function __construct() {
    		$this->baz = $this->foo;
    		$this->baz2 = $this->tata;
    	}
    }
     
    $foobar = new Foo;
    $foobar->_init();
    echo $foobar->bar->baz; // devrait retourner 'toto'
    echo $foobar->bar->baz2; // retourne 'titi'
    ?>
    Si quelqu'un peut m'expliquer pourquoi est-ce que j'arrive pas à acceder à la propriété $foo, cela me rendrait grandement service...
    Elle prends bien la valeur qu'on lui assigne mais apparemment, l'héritage ne suit pas

    Merci bien.

  2. #2
    Membre chevronné
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Par défaut
    salut,
    La classe est instancié avec une nouvelle valeur qui est null donc il est normal de ne pas voir toto s'afficher.
    regarde voir un exemple très simple d'héritage :
    poo-php5-heritage

  3. #3
    Invité
    Invité(e)
    Par défaut
    c'est bizare que ça marche : vu qu'il y a une boucle infinie dans ton code ...

  4. #4
    Membre averti Avatar de eexit
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 61
    Par défaut
    Il n'y a aucune boucle...

    @Gats Merci pour l'info..


    Mais comment fais-je alors ?
    Par que si dans mon constructeur de Bar j'ai besoin de $foo, comment je peux lui transmettre sans lui filer en paramètre ?

    Merci.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Il n'y en à pas parceque PHP ne fait pas automatiquement appel au constructeur parent. Mais si c'était le cas, alors en faisant
    new Foo
    S'en suivrait, un new Bar, puis un new Foo, puis un new Bar ect ect ect

    Bien vu Bourgui.

    Si tu veux tester ajoute un parent::_construct() dans le ctor de Bar.

  6. #6
    Membre averti Avatar de eexit
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 61
    Par défaut
    Même si dans le constructeur de Bar je fais appel au constructeur de Foo (qui n'existe pas d'ailleurs), dans aucun des cas, ça ferait une boucle puisque l'instanciation de Bar se déroule dans la méthode _init();

    Sinon, ce serait sympa qu'on ne dérive pas du sujet.

    Merci.

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

Discussions similaires

  1. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08
  2. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10
  3. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 12h26
  4. CREATEFILEMAPPING qui ne fonctionne pas???
    Par Jasmine dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2004, 19h33
  5. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04

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