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 PHP5] héritage objet


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut [POO PHP5] héritage objet
    Bonjour à tous,

    J'ai un problème dans le développement mon système de panier dans un développement de boutique en ligne. Je vous explique :

    J'ai une classe ReferenceProduit qui contient certaines variables et une classe ReferenceProduitPanier qui hérite de ReferenceProduit.

    Lorsque je veux ajouter une ReferenceProduit dans ma classe Panier je passe une instance de ReferenceProduit dans une methode addReference($referenceProduit,$quantité).

    Mon problème est le suivant : dans ma méthode addReference() je voudrais créer un nouvel objet ReferenceProduitPanier reprenant exactement le contenu de mon objet ReferenceProduit.

    Ma question est la suivante est-ce que je suis obligé de passer à la main toutes les informations contenues dans mon objet ReferenceProduit vers mon nouvel objet ReferenceProduitPanier? Existe t-il une autre solution?

    Merci d'avance pour vos réponses.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Mon problème est le suivant : dans ma méthode addReference() je voudrais créer un nouvel objet ReferenceProduitPanier reprenant exactement le contenu de mon objet ReferenceProduit.
    Hum, dans ce cas quel est l'intérêt pour RéférenceProduitPanier d'hériter de RéférenceProduit ? Pourquoi ne pas envoyer directement un RéférenceProduitPanier ? D'ailleurs quel est l'intérêt de cette classe RéférenceProduitPanier ?

    Ma question est la suivante est-ce que je suis obligé de passer à la main toutes les informations contenues dans mon objet ReferenceProduit vers mon nouvel objet ReferenceProduitPanier? Existe t-il une autre solution?
    Peux-tu donner un exemple concret ? Parceque je ne vois pas comment tu peux en arriver à une telle situation
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Salut Seb merci pour ta réponse.

    En fait je voulais passer par un objet intermédiaire ReferenceProduitPanier qui contiendra une variable $_quantite et certaines méthodes qui interviendront avec la quantité par exemple setQte, getQte, getTotal (qui reprendra le prix d'une Référence produit et la multipliera par la quantité)

    Voila en gros ce qu'elle devrait faire.

    Mon but c'est que depuis ma classe Panier je puisse parcourir mes ReferencesProduit que j'ai ajouté.

    A ton avis c'est mieux de faire une classe ReferenceProduitPanier indépendante de ReferenceProduit et de passer mon objet ReferenceProduit dans le constructeur?

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    En fait je voulais passer par un objet intermédiaire ReferenceProduitPanier qui contiendra une variable $_quantite et certaines méthodes qui interviendront avec la quantité par exemple setQte, getQte, getTotal (qui reprendra le prix d'une Référence produit et la multipliera par la quantité)
    Ok, donc cela peut justifier l'existence de RéférenceProduitPanier. Par contre se pose maintenant la question de la pertinence de l'instanciation de RéférenceProduit.

    Si un produit est destiné à être placé dans la panier : tu instancies directement un RéférenceProduitPanier qui héritera de RéférenceProduit.
    Si un produit est destiné à être affiché ou autre, bref à ne pas être placé dans le panier : tu instancies simplement un RéférenceProduit.

    Si tu choisis de passer en paramètre à RéférenceProduitPanier un RéférenceProduit alors l'héritage n'a plus lieu d'être (ce serait une sorte de Decorator).

    Voilà my 2 cents avec le peu de visu que j'ai sur ton appli
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    hello,

    sa s'appel un downcast (re type un objet ReferenceProduit vers ReferenceProduitPanier ) et ce n'est pas possible en php.
    Les fonctions de transtypage entre deux types utilisateur ne sont pas implémentées.

    Donc oui, se sera à la main.

    a +

    @see http://www.java2s.com/Code/CSharp/La...tsdowncast.htm

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par kro001 Voir le message
    En fait je voulais passer par un objet intermédiaire ReferenceProduitPanier qui contiendra une variable $_quantite et certaines méthodes qui interviendront avec la quantité par exemple setQte, getQte, getTotal (qui reprendra le prix d'une Référence produit et la multipliera par la quantité)
    Pourquoi ne pas utiliser la composition plutôt que l'héritage ?
    Un truc de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class RefProduitPanier {
        protected $_refProduit;
        protected $_quantite;
        public function getTotal() {
            return $this->_refProduit->getPrix() * $this->_quantité;
        }
    }
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Merci à tous pour vos réponses.

    En fait je comptais créer un objet (ReferenceProduitPanier) intermédiaire parce que mon objet ReferenceProduit est indépendant du panier (je l'utilise par exemple pour la liste des produits, la fiche produit...).

    Donc à priori on est d'accord sur ce point là.

    Après (dites moi si je me trompe j'ai 2 solutions)

    1°/ Ma classe ReferenceProduitPanier hérite de ReferenceProduit dans ce cas je quand je créer une nouvelle instance de ReferenceProduitPanier je dois redéfinir toutes mes infos de ReferenceProduit vers ReferenceProduitPanier

    ex : ReferenceProduitPanier->setInfos(ReferenceProduit->getInfos())


    2°/ Ma classe ReferenceProduitPanier est indépendante de ReferenceProduit dans ce cas je stock mon instance ReferenceProduit dans une variable de ReferenceProduitPanier (ce que jml94 vient de dire)
    Par contre ici je devrais utiliser la méthode magique __call car je veux pas recréer toutes les méthodes de ReferenceProduit dans ReferenceProduitPanier juste pour récupérer une valeur

    ex:ReferenceProduitPanier->getPrixHt()
    avec
    getPrix(){
    return $this->_refProduit->getPrixHt();
    }

    Y a t-il une solution préférable à une autre selon vous?

    Moi j'aurais un penchant pour la 2°/

    Merci encore...

  8. #8
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par kro001 Voir le message
    Par contre ici je devrais utiliser la méthode magique __call car je veux pas recréer toutes les méthodes de ReferenceProduit dans ReferenceProduitPanier juste pour récupérer une valeur

    ex:ReferenceProduitPanier->getPrixHt()
    avec
    getPrix(){
    return $this->_refProduit->getPrixHt();
    }

    Y a t-il une solution préférable à une autre selon vous?
    Pas obligé d'utiliser __call.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class RefProduitPanier {
        protected $_refProduit;
        protected $_quantite;
        public function getRefProduit() {
            return $this->_refProduit;
        }
        public function getTotal() {
            return $this->_refProduit->getPrix() * $this->_quantité;
        }
    }
     
    $ReferenceProduitPanier->getRefProduit()->getPrixHt();
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Oui jml94 ça marche aussi

    Je vais faire comme ça merci à vous pour votre aide.

    Les début en POO sont difficiles....

    Merci encore

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

Discussions similaires

  1. [POO] passer un objet de page en page avec php5
    Par skyangel20 dans le forum Langage
    Réponses: 16
    Dernier message: 30/09/2007, 13h51
  2. [POO] PHP5 objet et session
    Par deborah95 dans le forum Langage
    Réponses: 4
    Dernier message: 17/04/2007, 20h58
  3. [POO] Assignation d'objet en php5
    Par jeff_! dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2006, 17h22
  4. [POO] session_register et objet en PHP5
    Par ralkif dans le forum Langage
    Réponses: 2
    Dernier message: 28/02/2006, 20h21
  5. [POO] PHP5 Objet
    Par Sylvain71 dans le forum Langage
    Réponses: 3
    Dernier message: 06/02/2006, 17h08

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