begin process at 2012 02 11 02:06:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Classes & Objets

 > 

Recupere l'objet parent d'une classe fille


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Recupere l'objet parent d'une classe fille

mardi 18 mars 2008 à 12:18:42 | Recupere l'objet parent d'une classe fille

knabis2000

Bonjour a tous,

J'aurait une question :

Est il possible de recuperer l'instance de l'objet mere d'une classe fille ?

Petite explication :
Imaginons 2 classe
class A{
       public function A(){
            $this->a = 1;
            $this->b = 2;
      }
}

class B{
     public function B(){
           $this->c = 3;
    }
    public getParent(){
           ?????????
    }
}

Donc ce que je voudrait, c'est qu'a l'appel de $b->getParent() ca me renvoit un l'objet A crée lors de la creation de B.

Merci d'avance pour vos reponses.


mardi 18 mars 2008 à 13:04:13 | Re : Recupere l'objet parent d'une classe fille

neigedhiver

Salut,

Tes notions d'objets sont erronnées. Lors de l'instanciation de l'objet de classe B, aucun objet de classe A n'est instancié : l'objet de classe B instancié hérite simplement des méthode et propriétés de la classe A, éventuellement redéfinies dans la classe B.

Ce que tu peux éventuellement faire, si vraiment tu le veux, c'est instancier un objet de la classe parente A. Ca, c'est faisable.

Une méthode élégante serait d'utiliser l'API de réflexion de PHP 5 :

$myB = new B();
$oRef = new ReflectionClass($myB);
$oParentClass = $oRef -> getParentClass();
if ($parentClass -> isInstantiable() && $oParentClass {
    $myParent = $oParentClass -> newInstance();
}

En PHP4, on peut faire comme ça :

$myB = new B();
$parentClass = get_parent_class($myB);
$myParent = new $parentClass();

La méthode PHP4 fonctionne aussi avec PHP5. Mais l'avantage de l'API de réflexion, c'est qu'on peut faire toute une batterie de tests qu'on ne peut pas faire en PHP4 (l'exemple n'en montre que 2 parmi beaucoup d'autres).


Neige
mardi 18 mars 2008 à 13:17:18 | Re : Recupere l'objet parent d'une classe fille

knabis2000

Re,

Deja merci pour ta reponse.

Entre deux j'ai changé ma methode parce que je perdait trop de temps.
Maintenant ma classe B crée un objet A et je peut donc le recuperer.

Mais, juste pour ma connaissance:
Le probleme que je rencontré c'est que l'objet B etait enregistré dans une variable session est lorsque j'arrive sur une page qui a besoin d'un objet de type A il me mettait une erreur de classe incomplete.
Donc je voulait recuperer un objet de type A qui possedait tout les valeurs modifiés grace a la classe B.

Càd, en gros : la classe B crée un objet A grace a une serie de méthode propre a B et je voulais recupere l'objet A ainsi crée.

Voila, encore merci.


mardi 18 mars 2008 à 13:24:39 | Re : Recupere l'objet parent d'une classe fille

neigedhiver

Réponse acceptée !
Re,

Je comprends pas bien : "lorsque j'arrive sur une page qui a besoin d'un objet de type A il me mettait une erreur de classe incomplete."

Par exemple :

class A {
    // Plein de trucs
}

class B extends A {
    // Encore plein de trucs
}

class C {
    // Un tas de choses
}

function test(A $objet) {
    // Fait les tests
}

$monObjet = new B();
test($monObjet);

Ici, la fonction test nécessite en argument un objet qui soit une instance de A.
$monObjet étant une instance de B, qui étant A, alors $monObjet sera pris en compte comme argument valide pour la fonction test, puisqu'il est une instance de B mais aussi de A (B étendant A).

Par contre :

$monAutreObjet = new C();
test($monAutreObjet);
Ici, la fonction test() ne sera pas appelée, parce que l'objet passé en argument n'est pas une instance de A ou d'une de ses classes filles.

Je sais pas si c'est plus clair pour toi, mais pour moi, ton problème n'est pas clair...


Neige
mardi 18 mars 2008 à 14:02:14 | Re : Recupere l'objet parent d'une classe fille

knabis2000

Re Re,

Alors je vais essayer d'être plus clair, avec un exemple concret :

J'ai un objet Panier que j'enregistre dans une variable de session, dont je me sert dans plusieurs page.
Sur une page précise je crée un objet SavedPanier qui ajoute a Panier une fonction de chargement a partir d'une BDD. Donc en sortant de cette page je me retrouve avec un objet SavedPanier.
Seulement sur les autre page il attend un objet de type Panier (car pas d'inclusion de la classe SavedPanier ) il me dit alors : "The script tried to execute a method or access a property of an incomplete object".

Le but était de garder dans la classe Panier juste les propriétés, et de l'etendre au besoin pour gerer  l'affichage,la création, la modification, etc suivant le contexte de la page ...... Mais je crois que je vais oublier cette idée au plus vite.

Voila, j'espere que c'est plus clair

Merci.

 





mardi 18 mars 2008 à 14:59:33 | Re : Recupere l'objet parent d'une classe fille

neigedhiver

Re,

http://fr.php.net/manual/fr/function.unserialize.php

Note: Directive unserialize_callback_func Il est possible de définir une fonction de callback qui sera appelée si une classe indéfinie est utilisée lors de la délinéarisation (ce qui évitera de voir l'objet recevoir le type d'objet incomplet object "__PHP_Incomplete_Class").


Neige


Cette discussion est classée dans : public, objet, classe, recupere, fille


Répondre à ce message

Sujets en rapport avec ce message

utiliser un objet d'une classe php dans une page html [ par articmen ] je doit utiliser mon objet de ma classe mais je n'arrive a rien ma page html affiche le code du bodyalors si il ya qqu'un qui peut m'aider merci d'ava probleme de classe en php [ par Elkaire ] Donc voila mon probleme!!dans une premiere page je rensegne les insances de mon objet. Une fois renseigné je peux réutiliser les instances cet objet d Quand on parle de Classe [ par Tomcube ] C'est une question très vaste,On parle de plus en plus de programmation objet. Qui dit programmation objet dit classe. D'ailleurs, c'est fou le nombre Utilisation d'une méthode avec pour parametre un objet [ par aguiran ] Salut, Mon pb ressemble un peu à celui posé par Mandark le 11/02, mais je ne souhaite pour ma part, pas ré-instancier un objet dans dans une autre cl Pb classe [ par nagrom_om ] Bonjour,Toute une appli php4 a refaire autant que je me mette au php 5.0 ^^. Mais je reste toujours aussi nul.J ai une classe de connexion (j ai essay objet sqlite [ par jackrichard ] bonjour a tousdésolé si la question est con mais bon la je pige pas sur un livre de php on me dit que php5 propose la classe sqlite_db mais kan j'essa Refonte de mon site en objet AIDE conception [ par vega11 ] Bonjour à tous, je suis actuellement en BTS informatique 2ème année et je m'amuse à créer pour une de mes activités un site de rencontre.Je suis très Probleme POO [ par cedriclomb ] Bonjour,Aujourd'hui au programme casse tete chinois ! :DVoila j'ai une classe B qui est une extends de Aun objet $b=new B;et ensuite $b->loadModule('C Boutique en ligne [ par Foxhive ] Bonjour à tous,Je voudrais creer une boutique en ligne et j'ai regardé cette classe : http://www.phpcs.com/codes/CLASSE-PHP5-PANIER-TOUTE-SIMPLE_34003 Comment avoir acces a ma classe connexion depuis un autre objet? [ par fabienenvac ] Bonjour,Je viens encore ici pour vous demander de l'aide.J'ai creer un objet pdo afin de me connecter à ma bdd, jusqu'ici ca va!Maintenant, je souhait


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales