Rendre dynamique le nom de la classe parente dont on hérite

Petit nouveau ! | 2 Messages

12 nov. 2010, 16:27

Bonjour
J'ai un pb simple à décrire, et pourtant je ne parviens pas à trouver un palliatif efficace.

J'aurais besoin de pouvoir déterminer dynamiquement dans une classe le nom de la classe parente dont je veux hériter.

Par exemple une classe voiture :

Code : Tout sélectionner

class Voiture extends Renault { ....... public function demarrer () { return parent::demarrer(); } public function stopper() { return parent::stopper(); } .... }
La classe voiture contient des instructions générique (demarrer, stopper, etc), c'est dans la classe Renault que j'ai implémenté les commandes spécifiques aux Renault.
j'ai donc ensuite une classe Peugeot par exemple, qui contient les mêmes noms de methodes que la classe Renault, mais avec les commandes propres aux Peugeot.
Ainsi je voudrais donc, selon un critère exérieur, pouvoir hériter de l'une ou l'autre classe (Peugeot, Renault, etc) dans ma classe Voiture.
Le but est évidemment de pouvoir conserver toujours la même syntaxe d'appel à ma classe Voiture et ses méthodes.

Après avoir cherché sur le net, sauf erreur, PHP ne permet pas de rendre dynamique le "extends ....". Si vous avez une autre solution propre, je suis preneur.
Merci d'avance.

ViPHP
ViPHP | 5462 Messages

12 nov. 2010, 16:58

hello, regarde du coté de factory :wink:

Eléphant du PHP | 275 Messages

12 nov. 2010, 17:12

le concept de l'héritage, ça serait plutôt "class Renault extends Voiture"

Petit nouveau ! | 2 Messages

12 nov. 2010, 18:10

Ouais bon ok l'exemple est mal choisi par rapport à la notion d'héritage, mais vous avez compris le besoin technique.
Je vais regarder du coté du pattern factory, merci.

Eléphant du PHP | 275 Messages

15 nov. 2010, 11:47

Ben, non, c'est pas une question d'exemple, mais si tu as une classe contenant les fonctions de tous tes éléments, et que tu veux y ajouter d'autres méthodes spécifiques, ta classe spécifique étend ta classe générique.

Mammouth du PHP | 661 Messages

15 nov. 2010, 20:48

à mon avis ce qui l'interresse c'est de pouvoir faire un truc dans ce genre là :
$myCar = new Voiture('renault') ;
// puis :
$myCar->demarrer() ;
$myCar->rouler() ;

/*
avec la methode demarrer() héritée de la classe renault
et la methode rouler de la classe Voiture
*/
d'où la proposition de stealth35 d'utiliser les factory !... en instanciant une classe renault à l'objet voiture appelé, les méthodes de la classe voiture peuvent revoyer sur l'objet instancié si il possède les méthodes demandées ...
Je te concède que dans les exemples actuels appeller
$marque = 'renault';
$myCar = new $marque();

avec class renault extends Voiture{}
reviendrait au même, mais il y a des moment en statique par exemple, ou pour éviter que l'on appel des classes qui n'existent pas, ou ... l'utilisation de ces procédés sont plus pratiques que d'autres ...

ViPHP
ViPHP | 5462 Messages

15 nov. 2010, 21:13

je pense que popy a raison sur le fait que c'est inversé, et ca se trouve c'est juste ca le probleme

Mammouth du PHP | 19672 Messages

18 nov. 2010, 23:46

Ben, non, c'est pas une question d'exemple, mais si tu as une classe contenant les fonctions de tous tes éléments, et que tu veux y ajouter d'autres méthodes spécifiques, ta classe spécifique étend ta classe générique.
La réflexion de popy est tout à fait pertinente et les mots clés essentiels sont là : générique et spécifique.
C'est donc effectivement un problème conceptuel pris à l'envers :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 661 Messages

20 nov. 2010, 14:14

Ben, non, c'est pas une question d'exemple, mais si tu as une classe contenant les fonctions de tous tes éléments, et que tu veux y ajouter d'autres méthodes spécifiques, ta classe spécifique étend ta classe générique.
La réflexion de popy est tout à fait pertinente et les mots clés essentiels sont là : générique et spécifique.
C'est donc effectivement un problème conceptuel pris à l'envers :-k
Je suis d'accord avec vous, mais parfois il es impossible de refondre tout ou parti d'un logiciel pour le remettre dans le bon ordre, et dans ces cas il faut trouver une solution palliative qui réponde au besoin tout en préparant une hiérarchisation qui par la suite pourra être utiliser dans le bon ordre pour de nouveaux développement ...
et devant l'instance de bougli sur sa demande, il m'avait semblait qui était évitable de l'envoyer boulet avec pour simple conclusion : "revois ta copie tu t'y es pris comme un manche"

Désolé, si j'ai insisté dans son sens tordu !... mais en ce moment, je fais du tordu, donc ça ne me surprends pas que d'autres y soient confronté !.. :D