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 :

classes imbriquées . [Fait]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    Points : 46
    Points
    46
    Par défaut classes imbriquées .
    bonsoir,

    pour mon projet j'ai ecris entre autre deux classes A et B
    B ne sera jamais utilisée directement, mais toujours comme étant un attribut de A. J'ai donc quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class classA
    {
        var $var1;
        var $var2;
        var $B;
     
        function classA
        {
            $this->var1 = 1;
            $this->var2 = 2;
            $this->B = new classB();
         }
    }
    jusque là ça va, mais c'est au niveau de la classeB que j'ai un soucis. Comment dans une méthode de B récupérer un des attributs de A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class classB
    {
        function test()
        {
           // c'est là que je voudrais accéder à $var1 de A.
            //comment puis-je faire ???
        }
    }
    Je ne sais si ce que je demande est possible ou si je dois revoir complètement ma structure. Mon objectif est d'alléger ma classA. Celle-ci est utiliser dans toutes les pages de mon projet mais pour seulement 3 ou 4 fonctions. Cependant dans certains cas, que je ne peux pas identifier avant de charger A, j'ai besoin de quelques fonctions supplémentaires, d'ou mon idée de l'étendre via ma classB. Il existe peut-être une autre solution plus 'académique' ou plus facile à mettre en oeuvre.

    Merci de votre aide.

  2. #2
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Tu pourrait passer à la classe B une référence vers la classe A:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class classB
    {
      function test(classA $a)
      {
        $a->var1; // $var1 doit être de visibilité publique
      }
    }
    Comme on dirait que tu utilises php4, il faudrait faire comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class classB
    {
      function test(&$a)
      {
        $a->var1;
      }
    }
    Aussi, rien n'empêche que l'instance de classA soit une variable membre de l'instance de classB: plus la peine de la passer à chaque fonction, elle serait directement disponible avec $this->a par exemple.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    Points : 46
    Points
    46
    Par défaut
    donc si je définis ma classe B comme ça

    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
    class classeB
    {
        var $a;
     
        function classeB(&$classA)
        {
            $this->a = $classA;
        }
     
        function test()
        {
            // j'accede à un attribut de A comme ça
            $this->a->var1;
        }
    }
    et donc dans le constructeur de ma classeA j'instancie comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function classeA
    {
        $this->var1 = 1;
        $this->B = new classeB(&$this);
    }
    c'est bien ça ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141
    Par défaut
    class A extend B

  5. #5
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    ta réponse se situe au niveau de l'héritage de class
    en gros ta class B est ta class abstraite ensuite ta class A etend la class B ce qui aura pour effet de permettre à A d'hériter des méthodes et propriétés de B dans la mesure ou ces dernières ne sont pas "private".

    voici un exemple:
    http://php.developpez.com/faq/?page=...-php5-heritage

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    Points : 46
    Points
    46
    Par défaut
    oui mais si je fait hériter A de B, dans tous les cas A possedera l'ensemble des fonction de B. Moi je cherche juste à ajouter ces fonctions temporairement, au cas par cas ....

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141

  8. #8
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par Dauphin Voir le message
    oui mais si je fait hériter A de B, dans tous les cas A possedera l'ensemble des fonction de B. Moi je cherche juste à ajouter ces fonctions temporairement, au cas par cas ....
    mmh, il me semble que c'est le contraire : B présentant la même interface que A tout en l'étendant de quelques fonctions supplémentaires (c'est d'ailleurs la signification de extends ), c'est B qui doit hériter de A.

    Après, selon le cas, tu créeras une instance de A ou de B dans ton code.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

Discussions similaires

  1. [C#]Remonter des événements dans des classes imbriquées
    Par Kcirtap dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/12/2013, 12h43
  2. Classe imbriquée et son constructeur
    Par toninlg dans le forum C++
    Réponses: 7
    Dernier message: 30/09/2006, 06h21
  3. Classe imbriquée
    Par dj.motte dans le forum C++
    Réponses: 10
    Dernier message: 13/04/2006, 07h34
  4. classes imbriquées
    Par smedini dans le forum C++
    Réponses: 10
    Dernier message: 10/12/2005, 13h16
  5. Intérêt des classes imbriquées ?
    Par elitost dans le forum Langage
    Réponses: 5
    Dernier message: 21/10/2005, 09h30

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