|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() Développeur informatique Inscription : décembre 2008 Messages : 344 ![]() |
Bonjour,
Voilà, j'ai des librairies contenant des class, et pour des raisons pratiques je voudrait ajouter des méthodes à une de ces class, mais sans toucher à ma librairie et en évitant de déclarer une class dérivée juste pour ça... Existe t-il donc en PHP un moyen d'ajouter une méthode à une class sans toucher à la librairie qui contient la déclaration de class originale (directement dans le code de ma page donc) ? En vous remerciant par avance... |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : septembre 2010 Messages : 7 136 ![]() |
non tu peux pas
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Développeur informatique Inscription : décembre 2008 Messages : 344 ![]() |
Bon bha comme ça, c'est clair !
merci ! |
|
|
00
|
|
|
#4 | |||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 991 ![]() |
En théorie non, c'est impossible contrairement à ce qu'on peut voir en JavaScript notamment.
En pratique il existe des patterns pour faire ça, dont le plus adapté à ce cas est le pattern Decorator. Le principe est d'encapsuler un objet dans un autre qui va le "décorer", y ajouter de nouvelles fonctionnalités: http://en.wikipedia.org/wiki/Decorator_pattern Je te recommande fortement l'usage de ce pattern. S'il s'agit d'une spécialisation, un héritage est envisageable également. Attention à ne pas tomber dans les écueils de l'héritage fonctionnel comme expliqué par ici. Citation:
Exemple d'une classe parfaitement générique en PHP: Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|||
|
00
|
|
|
#5 | ||
![]() ![]() Inscription : septembre 2010 Messages : 7 136 ![]() |
sinon en marrant t'as
Code :
__________________
http://blog.stealth35.com/ |
||
|
|
00
|
|
|
#6 | ||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 991 ![]() |
Y'a ça aussi pour faire de la programmation orientée prototype sous PHP 5.3:
Code :
Enfin, pour moi le décorateur y'a que ça de vrai
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Sébastien AlfaiateDéveloppeur Web Inscription : janvier 2007 Messages : 1 329 ![]() |
Et pourquoi ne pas tout simplement créer une autre classe qui hérite de celle que tu veux modifier ?
__________________
Zend Certified Engineer PHP 5.3 « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana |
|
00
|
|
|
#8 | |
|
Membre confirmé
![]() Développeur informatique Inscription : décembre 2008 Messages : 344 ![]() |
Ummmummmm... A vrai dire, en posant la question, je m'attendais à une réponse du type "marrant" pour reprendre les propos de stealth35...
L'idée était justement d'éviter de faire une spécialisation en créant une class dérivée qui n'a (philosophiquement) pas lieu d'exister, tout en évitant de rajouter une méthode à ma class sans modifier (et alourdir) la librairie... Si je comprend bien Benjamin, ta solution avec un design pattern impose tout de même de modifier la librairie pour rendre la class apte à accueillir de nouvelles méthodes !? Par ailleurs, la déclaration de nouvelles méthodes peut rapidement poser un problème de lisibilité non ? Suite à la 1er réponse que l'on m'a donné, j'avais finalement opté pour faire une class spécialisée, mais comme je ne suis pas content de ma solution, je la ré-écrirais bien façon "marrante" : $ojb->my_func = function(...){...} Y'a t-il une raison ou des contres indications qui devraient me pousser à éviter cette méthode pourtant fort simple ? en attendant, merci pour ces réponses très instructivent ! EDIT : Citation:
|
|
|
|
00
|
|
|
#9 | ||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 991 ![]() |
Citation:
Citation:
![]() Citation:
Citation:
Je reste sur ma recommandation concernant le pattern Decorator. Note: si ton but est de simplifier l'usage d'une classe tu peux utiliser le pattern Façade: http://fr.wikipedia.org/wiki/Fa%C3%A..._conception%29
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||||
|
00
|
Copyright © 2000-2012 - www.developpez.com