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 :

[Débutant] [POO] Problème d'héritage


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 20
    Points
    20
    Par défaut [Débutant] [POO] Problème d'héritage
    Bonjour !
    J'ai un souçis avec une portion de code. Il est un peu long, mais comme je n'arrive à savoir où est l'erreur car je ne m'y connais pas beaucoup en programmation objet, j'ai préféré le poster en entier.

    class master_element
    {

    var
    $code="";
    var
    $error="";

    function
    add_code($code="")
    {
    $this->code.=$code;
    }

    function
    return_code()
    {
    return
    $this->code;
    }

    function
    show_code()
    {
    echo
    $this->code;
    }

    function
    add_error($error="")
    {
    $this->error.=$error;
    }

    function
    error()
    {
    if(empty(
    $this->error))
    {
    return
    false;
    }
    else
    {
    return
    true;
    }
    }

    function
    return_error()
    {
    return
    $this->error;
    }

    function
    show_error()
    {
    echo
    $this->error;
    }

    }



    class
    element extends master_element
    {

    var
    $root;

    function
    element($root)
    {
    $this->root=$root;
    }

    function
    add_code($code="")
    {
    $this->code.=$code;
    $this->root->add_code($code);
    }

    function
    add_error($error="")
    {
    $this->error.=$error;
    $this->root->add_error($error);
    }

    }



    class
    db extends element
    {

    var
    $connection;
    var
    $host;
    var
    $user;
    var
    $pass;
    var
    $base;

    function
    db($root,$host,$user,$pass,$base)
    {
    $this->element($root);
    $this->host=$host;
    $this->user=$user;
    $this->pass=$pass;
    $this->base=$base;
    $this->add_error("hiik problème !");
    }

    function
    connect()
    {
    $this->connection=mysql_connect($this->host,$this->user,$this->pass);
    mysql_select_db($this->base,$this->connection);
    }

    function
    deconnect()
    {
    mysql_close($this->connection);
    }

    }

    Mon problème est le suivant: quand je crée un objet à partir de la classe master_element et que j'utilise la fonction add_error, ça fonctionne.
    Par contre dès que je crée un objet à partir de la classe element (comme par exemple la classe db de mon code) et que j'utilise la fonction add_error, la variable error du parent (root, donc l'objet créé à partir de master_element) n'est pas modifiée.

    Merci de prêter attention à mon problème.

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    En fait, j'aimerais simplement faire remonter les erreurs rencontrées das les différents objets vers l'objet principal, le "main" si vous voulez. De même avec le code: si on rajoute du code html à un des objets (qui pourrais être un menu, un tableau, un texte), ce code est aussi rajouté à l'objet "main", comme ça je n'aurais plus qu'une seul variable de type texte qui contiendra tout lecode html de ma page.

    Après plusieurs essais dans mon code au dessus, j'ai l'impression que mon problème vient du fait que je ne peux pas modifier les variables $code et $error d'un objet parent, alos que je peux les voirs.

    Si ce n'est pas clair, dites le moi.

  3. #3
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    je ne comprend pas très bien ce que tu veux faire

    ti tu veux que ton instance d'objet élément modifie l'élément root que tu lui à donné à la création il te faut une référence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $truc = 45;
     
    function test($root) {
      $root = 12;
    }
     
     
    test($truc);
    echo $truc;
    va t'afficher 45

    ce que tu cher à faire c'est à avoir dans ton élément une référence à ton objet master
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $truc = 45;
     
    function test(&$root) {
      $root = 12;
    }
     
     
    test($truc);
    echo $truc;
    affiche 12
    dans ton cas le constructeur doit recevoir son parametre par référence
    et enregistrer dans l'objet element un référence
    ton constructeur devient donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     function element(&$root) {
      $this->root=&$root;
    }
    su tu ne mest pas le & dans la définition de ta fonction l'objet que tu passe est recopié
    lors de l'affectation même chose sans le & c'est une recopie.

    A+JYT

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    Ah ok, merci beaucoup, je n'avais vu nulle part qu'il fallait mettre un "&".
    Et merci aussi d'avoir eu le courage d'essayer de comprendre mon problème qui était assez mal expliqué.

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

Discussions similaires

  1. [POO] Problème de classes et héritage
    Par Kabanon dans le forum Langage
    Réponses: 1
    Dernier message: 25/10/2007, 12h37
  2. [POO] Problème d'héritage "inversé"
    Par v4np13 dans le forum Langage
    Réponses: 7
    Dernier message: 01/10/2007, 01h25
  3. [POO] Un Problème d'héritage?
    Par redsaint0 dans le forum Langage
    Réponses: 6
    Dernier message: 01/06/2007, 16h44
  4. [POO] Problème dans un exercice sur l'héritage
    Par FabaCoeur dans le forum C++
    Réponses: 2
    Dernier message: 05/05/2007, 17h09
  5. [POO] Problème héritage des classes PHP4
    Par zana74 dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2006, 16h00

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