|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : décembre 2007 Messages : 24 ![]() |
Bonjour,
En quelques termes imagés, voilà mon problème : supposons que j'ai une classe mère Voiture dont hérite les classes Renault et Peugeot. Ma classe Voiture est instanciée à partir d'un fichier de données (XML), dans lequel est spécifié, entre autre, la marque du véhicule. Je n'ai pas de moyen simple d'accéder à cette information à partir de mon fichier de donnée, mais une fois ma classe mère instanciée, je peux très facilement l'obtenir. Mon problème devient évident : j'ai besoin d'instancier ma classe mère Voiture pour pouvoir obtenir l'info qui me permettrait de savoir quelle classe fille utiliser pour instancier mon objet : je dois avoir la voiture sous les yeux pour déterminer sa marque. Donc : est-il possible, une fois un objet mère instancié de le "caster" en objet fille, sans avoir à instancier à nouveau l'objet ? Et si, comme je le soupçonne, ça n'est pas possible, connaissez vous une "bonne pratique", un design pattern, permettant de résoudre élégamment ce problème. Merci. |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : janvier 2007 Messages : 1 452 ![]() |
Pour la bonne pratique il faut regarder le pattern d'usinage je pense (factory).
Dans les faits, une voiture étant une voiture ? Qu'est censée représenter la classe Fille ? Les voitures de la marque renault ? Les quatres - quatres ? Si c'est l'idée cela ne me semble pas être la bonne piste. Une 2cv, ou un 44, à toujours 4 roues, effectue les braquages de la même manière, ce voit appliquer les couleurs de la même manière ect. bye |
|
|
00
|
|
|
#3 | ||
![]() Développeur Web Inscription : juillet 2003 Messages : 676 ![]() |
Dès la lecture de ton post j'ai tiqué.
Effectivement, comme le dit Kaymak, la marque de voiture est une propriété de la voiture, et non une extension de possibilités. Si c'est l'exemple qui est pas bon, mais que ton pb reste le même, je ferais effectivement un factory directement dans la classe voiture Code :
__________________
Articles sur developpez.com - Gestion des exceptions avec PHP5 - Chiffrement et hash en PHP contre l'attaque Man in the middle - Aedituus - Espace membre sécurisé en PHP5 Lithium : ORM ActiveRecord PHP5 extrêmement léger |
||
|
00
|
|
|
#4 | |
|
Invité de passage
![]() Inscription : décembre 2007 Messages : 24 ![]() |
Citation:
Edit : le problème de la factory, c'est que ça ne m'évite pas d'effectuer deux fois le chargement du fichier XML en structure DOM (opération effectué par le constructeur de la classe voiture si je veux avoir accès à la marque de la voiture), non ? en terme de performance ça revient en gros à instancier voiture, tester le type de voiture, instancier renault. en plus, il y a un truc qui me chiffonne, c'est qu'alors Voiture doit connaitre toutes les classes potentielles qui peuvent hériter d'elle. |
|
|
|
00
|
|
|
#5 | ||
|
Membre éprouvé
![]() ![]() Inscription : mai 2008 Messages : 450 ![]() |
un petit rappelle de la difference entre static et non static :
- static interviens dans un contexte de classe. - non static dans un contexte de l'objet donc, quand tu sais ca il est tres facile de faire : tester et approuver, bon pour copier/coller Code :
pour plus d'info sur le pattern j'ai ecrit ce microscopique tuto, a la base c'etait pour expliquer les interfaces mais comme les deux sont relativement lies . http://www.developpez.net/forums/d60...nterfaces-php/ |
||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : janvier 2007 Messages : 1 452 ![]() |
j'aurai rajouté une méthode static pour peupler l'objet voiture en fonction d'un tableau, ou d'un noeud XML (vu que c'est ce qui nous intéresse).
Sinon c'est tout à fait cela. |
|
|
00
|
|
|
#7 |
|
Membre éprouvé
![]() ![]() Inscription : mai 2008 Messages : 450 ![]() |
theoriquement c'est ce que ma methode static xml2dom fait. j'ai juste mis un array car j'aime quand je donne un exemple que le copier/coller marche pour comprendre.
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Inscription : janvier 2007 Messages : 1 452 ![]() |
ah ok. J'avais pas compris cela comme il n'y avait pas d'arguments en entrée. Sa m'apprendra à lire au lieu de parcrourir.
a + |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : décembre 2007 Messages : 24 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com