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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    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 chevronné 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
    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 confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    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 éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  5. #5
    Membre expérimenté

    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
    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 confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 62
    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 ....

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, 13h43
  2. Classe imbriquée et son constructeur
    Par toninlg dans le forum C++
    Réponses: 7
    Dernier message: 30/09/2006, 07h21
  3. Classe imbriquée
    Par dj.motte dans le forum C++
    Réponses: 10
    Dernier message: 13/04/2006, 08h34
  4. classes imbriquées
    Par smedini dans le forum C++
    Réponses: 10
    Dernier message: 10/12/2005, 14h16
  5. Intérêt des classes imbriquées ?
    Par elitost dans le forum Langage
    Réponses: 5
    Dernier message: 21/10/2005, 10h30

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