Son bout de code (plutôt simple) est encore très expérimental et ne fonctionne que sous PHP 5.3.x car il s'appuie essentiellement sur les closures introduites dans la branche 5.3.
Ses implications sont très intéressantes, car il offre des possibilités de méta-programmation et de « monkey-patching » jusque-là non-accessibles comme l'ouverture, la modification et le clonage des classes et l'ajout des méthodes à n'importe quel moment de l'exécution du code.
Selon Dennis, son hack permettrait aussi de limiter la portée des classes et rendre certaines classes temporaires pouvant être débarrassés par le ramasse-miettes.
Son usage ressemblerait à cela :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Définir une nouvelle classe avec un constructeur et une méthode $animal = $class->new() ->def('init', function($t, $name) { $t->name = $name; }) ->def('speak', function($t) { echo "My name is $t->name\n"; }); // Etendre la classe en ajoutant une autre méthode $dog = $animal->extend() ->def('speak', function($t) { echo "My name is $t->name, I have just met you and I love you, SQUIRREL!\n"; }) ->def('bark', function($t) { echo "Woof!\n"; }); |
Certains blogueurs applaudissent mais d'autres qualifient son bout de code de « bricolage » et l'invitent plutôt à changer de langage.
Son code est disponible sur GitHub.
Et vous ?
Qu'en pensez-vous ? « Bricolage » inutile ou « invention » vraiment intéressante ?
Et d'une manière générale, que reprochez-vous au modèle objet de PHP ?
Source : Le Blog de Dennis Hotson