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] Changer la classe d'un objet déjà instancié


Sujet :

Langage PHP

  1. #1
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut [POO] Changer la classe d'un objet déjà instancié
    bonjour,

    voilà j'ai une petite question

    admettons que j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Babar extends Elephant {
         public function parleBabar() {
              echo "hello world!\n";
         }
    }


    si j'ai déjà qqpart un objet
    $elephant = new Elephant();

    .... ca fait des trucs là ...

    puis à un moment, j'ai envie d'appeler $elephant->parleBabar();

    mais $elephant n'est pas un Babar, donc ca crache un

    Fatal error:
    Call to undefined method Elephant::parleBabar()
    bref, comment fait-on pour changer dynamiquement la classe d'un objet déjà instancié ? sachant que cette nouvelle classe est de toute facon hérité de l'autre donc

    il me faudrait qqch qui serait l'equivalent de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $elephant , change toi en babar !!!



    ps: désolé pour les noms pourris, c'est le 1er truc qui m'est venu ce matin

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Hello,

    PHP ne te permet pas de caster un objet en un autre.

    Je crains que tu n'ais d'autre choix que de revoir la définition de tes classes

  3. #3
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut
    gloups

    pas bon ca.

    et un ptit bricolage 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
    14
    15
    16
    17
     
     
    class Babar extends Elephant {
         public function parleBabar() {
              echo "hello world!\n";
         }
     
         public function __construct($parent = null) {
               if (is_null($parent)
                     parent::_construct();
               else
                    /// faire ici qqch qui fait que ca marche :)
                    // peut-etre stocker le parent comme attribut
                    // pour l'accéder ensuite à une methode parente si l'attribut ou la methode appelée n'existe pas dans Babar
         }
     
    }
    avec à coté, le jour où je veux construire un Babar à base d'éléphant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $babar = new Babar($elephant);
    $babar->parleBabar();
    peut-etre un accesseur, qqch comme ca ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Si tu n'as pas de constructeur défini pour Babar, tu peux toujours en créer un avec en paramètre Elephant. Dans le cas contraire tu peux modifier ton constructeur pour qu'il gère un paramètre de type Elephant.

    Ca risque d'être un peu crade, mais PHP te permet pas trop de faire autrement. A moins de reprendre le code un peu plus en profondeur.

  5. #5
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Quand on fait de l'objet il y a des règles d'héritage de polymorphisme et autres interfaces. On les respecte... et puis c'est tout !

    ERE

  6. #6
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    Salut,

    Quand on fait de l'objet il y a des règles d'héritage de polymorphisme et autres interfaces. On les respecte... et puis c'est tout !

    ERE

Discussions similaires

  1. [2.x] Héritage - Changer la classe de mon objet par sa sous-classe
    Par sly_web2 dans le forum Symfony
    Réponses: 1
    Dernier message: 04/09/2012, 11h08
  2. Changer la classe d'appartenance d'un objet
    Par plxpy dans le forum Général Python
    Réponses: 3
    Dernier message: 24/03/2011, 22h28
  3. Réponses: 7
    Dernier message: 22/10/2008, 10h14
  4. [POO] Changer la source d'un objet (flash) en Javascript
    Par thomine dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 11/02/2008, 16h54
  5. [POO] Récupérer le nom de la classe d'un objet
    Par boux2 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/04/2007, 09h13

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