|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 3 904 ![]() |
Bonjour à tous,
Vous vous rappellez de cette actualité ? dhoston proposait un proof of concept d'implémentation des objets dynamiques en PHP à l'aide des closures de PHP 5.3. Cette idée me parait intéressante à plusieurs points de vue mais il manque tout de même un concept pourtant bien pratique: l'héritage. En m'inspirant de son code et de l'implémentation de l'héritage de prototypes de JavaScript, j'ai créé cette toute petite librairie - pour l'instant au stade expérimental - afin de voir ce que ça pouvait donner. A l'instar de la classe de dhotson, les classes sont maintenant des objets dont les membres sont manipulables dynamiquement mais désormais, il est aussi possible de manipuler les prototypes de ces objets et de les échanger d'un objet à l'autre. On peut bien évidement créer une chaine de prototypes de telle sorte que les filles héritent des membres de leur(s) mère(s). Concrêtement, ça permet (entre autres) de faire ça: Code PHP :
Plutôt sympa non ? Les développeurs JavaScript reconnaîtrons sûrement cette syntaxe, mais je tiens à rappeller que je me suis inspiré du fonctionnement de JavaScript, ce n'est pas une copie parfaite, loin de là (et je ne pense pas qu'on y arrive correctement avec PHP 5.3). Quelques explication s'imposent: l'exemple ci-dessus montre comment créer de nouvelles classes à l'aide d'un objet $class (qui est en fait notre fabrique de classes), cet objet class ne porte que la méthode new qui sert à la création de nouvelles instance (de $class ou de ses filles). On note au passage que c'est le prototype qui est utilisé pour la création de nouvelles instance (en réalité, par clonage du prototype ce qui évite de modifier les membres d'un objet créé si on change sa classe - si c'est au contraire ce que vous voulez, enlevez le mot clé clone). On créé une nouvelle classe en instanciant un Object et en lui passant $class comme prototype, donc votre nouvelle classe ($string dans l'exemple) pourra utiliser new() dans son contexte. Il ne reste qu'a dotter notre nouvelle classe d'un constructeur (la méthode construct) et des méthodes qu'on veut et c'est fini. Important: on se place ici dans un contexte PHP 5.3, le support de Closure::bind qui permet d'utiliser le mot clé $this dans une fonction annonyme ne vient qu'avec PHP 5.4. A cet effet vous devez impérativement dotter vos méthodes d'un premier paramètre $that qui tiens lieu de $this pour le corp de la méthode. Dans les faits, quand vous invoquez $objet->method($a,$b,$c), vous invoquez method($objet,$a,$b,$c), la mécanique qui injecte l'instance courante en tant que premier paramètre de la méthode est fait par la méthode Object::__call. A noter également qu'a l'instar de l'OOP en JavaScript, on ne dispose plus de visibilité sur les membres, tout deviens public. Pour être tout à fait honnête avec vous, je doute moi-même de l'utilité d'un tel concept en PHP vu qu'on ne peut pas sérialiser les Closures (du moins, pas simplement). Donc on perd systématiquement tous nos objets à la fin du script. Enfin, c'était marrant à écrire et si quelqu'un lui trouve une utilité ce sera toujours ça de pris. Amusez-vous bien avec cette lib et n'hésitez pas à me faire part de vos retours. Je publierai bientôt le code sur GitHub une fois que j'aurais fini de tester tout ça (eh oui, je n'ai même pas encore écrit mes tests unitaires).
__________________
On vous a menti PHP, Injection de dépendances et composants La POO en PHP en 10 minutes pour moins Suivez-moi sur GitHub et TwitterN'oubliez pas de vous servir des bouttons , et
|
||
|
00
|
|
|
#2 | ||
![]() ![]() Inscription : septembre 2010 Messages : 7 958 ![]() |
et juste ça
Code :
__________________
http://blog.stealth35.com/ |
||
|
|
00
|
|
|
#3 | |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 3 904 ![]() |
ça c'est déjà fait
![]() Citation:
__________________
On vous a menti PHP, Injection de dépendances et composants La POO en PHP en 10 minutes pour moins Suivez-moi sur GitHub et TwitterN'oubliez pas de vous servir des bouttons , et
|
|
|
00
|
|
|
#4 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 3 904 ![]() |
Le projet est désormais disponible sur GitHub
__________________
On vous a menti PHP, Injection de dépendances et composants La POO en PHP en 10 minutes pour moins Suivez-moi sur GitHub et TwitterN'oubliez pas de vous servir des bouttons , et
|
|
00
|
Copyright © 2000-2013 - www.developpez.com