Interfaces et héritage multiple php

Fermé
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 - 2 janv. 2010 à 19:52
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 - 28 avril 2011 à 22:00
Bonjour,

J'ai un problème lors de mon utilisation de PHP en tant que langage OO.
J'ai besoin de pouvoir faire des héritages multiples, chose 'impossible' en php, que les interfaces devraient pouvoir réussir.

L'idée est la suivante: toutes les classes héritent d'une classe mère qui contient un certain nombre de méthodes dont les classes enfants ont besoin. Malheureusement, j'ai besoin de créer d'autres classes, dont les classes enfants précitées pourront aussi hériter. L'interfaçage multiple est supposé pouvoir m'aider, mais je n'y pige rien, quelqu'un pourrait il m'aider?

Concrètement:
Les classes parents:
une classe mère
une classe menu
une classe form

Les classes enfants:
une classe article
une classe galerie
une classe page

(ce sont des exemples assez proches de ce que j'ai fait).

J'ai besoin que ma classe article, puisse hériter de mes classes mère et form, en ne déclarant que dans les classes parentes (donc mère et form) les méthodes qui m'intéressent ( ne déclarer la méthode créer_form que dans la classe form et pas ailleurs).

Comment pourrais je faire ça en php?

Cordialement^^

Smoke

2 réponses

Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
3 janv. 2010 à 13:02
help please
0
Bonjour,

Dans le cas qui te concerne tu ne sembles pas comprendre ce qu'est le paradigme de la programmation orientée-objet.

En effet, ce que tu tente de faire s'appelle des classes de traits (https://en.wikipedia.org/wiki/Traits_class Cela est une stratégie de programmation qui utilise en effet la possibilité de l'heritage multiple de C++. En résumé, ce que tu veux faire est impossible en PHP.

-------
Ceci étant dit, voici une solution sans interface (qui ne respecte aucunement le principe d'héritage stipuler par Liskov)

Dans ton cas, toutes tes classes Enfants hérite de la Mere, si c'est le cas, la Mere hérite de Form et le tour est jouée. L'envers de cette solution, c'est que la classe Mere ne serait pas instanciable, car tu devras la déclarer comme étant abstraite.
-------

Bonne chance
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
28 avril 2011 à 22:00
Merci pour la participation, bien que le sujet remonte à plus d'un an^^

J'ai trouvé ma solution au final, en décomposant correctement la classe mère je me suis rendu compte que certains éléments n'étaient pas utiles pour suffisament de classes pour justifier leur présence dans la classe mère.
J'ai donc réduit les méthodes de la classe mère au strict minimum, les fonctions "système".
Les autres méthodes sont parties dans d'autres classes et y gèrent la construction de formulaires complexes via des cartes ainsi que la construction de balises html, bref, que du bonheur :o)

Avec l'expérience acquise en cours de route, il me paraît désormais évident que l'héritage multiple systématique que je souhaitais infliger à mes différentes classes n'était vraiment, mais alors vraiment pas une bonne idée :D, et changer de méthode m'aide à avoir un code plus simple, plus clair, plus conçis, ce qui me permet d'en faire beaucoup plus.
0