Page 1 sur 4

Traits (ou l'héritage horizontal)

Posté : 19 févr. 2009, 14:12
par Hywan
Hey :-),

Ce matin, en lisant le blog de Julien Pauli, je suis tombé sur Traits et PHP : héritage horizontal. Pour en savoir plus, notre sympathique Julien nous propose de lire un article : Request for Comments: Horizontal Reuse for PHP. L'article est bien fait, on comprend les tenants et les aboutissants.

Julien Pauli nous précise que Traits était prévu pour PHP 6 à l'origine, mais ça a déjà été discuté pour PHP 5.3. A priori (remarque à pondérer), on pourrait le trouver dans PHP 5.4 (si cette version sort).

Malgré tout, on le trouve en patch dans le dépôt CVS PHP 6 [1], on peut dores et déjà l'essayer.

Mon avis sur les Traits ? Est-ce bien important :P ?
Ça répond un problème de réutilisation et de maintenance du code, comme d'habitude. Il restait quelques cas avec l'héritage simple où l'on devait dupliquer du code (berk, pas bien !). On avait différentes façons de résoudre le problème mais on avait quand même pas mal de code à écrire. Trait est une bonne façon de contourner ce problème, mais comme il est dit un peu partout, c'est une sorte de pseudo héritage multiple … Bah, pourquoi ne pas faire un réel héritage multiple alors ? Je sais que c'est très compliqué et que ça n'a pas que des avantages, c'est peut-être pourquoi PHP a choisi Trait. Mais il faudra revoir la syntaxe, car elle utilise les même mots-clés que pour les lambda-calculus, et ça, c'est mal …
Bon, c'est une RFC bien sûr, mais autant donner nos avis de suite ;-).

Donc, une sortie pour PHP 5.4 a priori, donc une intégration par les frameworks courants pour … 2011 ? Il faut que tout le monde soit à jour … On se refait un petit gophp5.3 au moins ?


[1] et pas CSV comme l'a mis Julien ;-).

Posté : 22 févr. 2009, 14:55
par Sékiltoyai
Ouais bah encore une nouvelle structure dans PHP, ça devient vraiment le bordel entre les interfaces, les classes, les namespace, et les traits…
Bref, Il va falloir commencer à penser à arrêter d'allourdir le langage…

Posté : 22 févr. 2009, 15:11
par katagoto
Tout est relatif, c'est juste à maitriser, voilà tout...
Moi je trouve cette fonctionnalité plutôt bien, depuis le temps que je l'attend...

Posté : 22 févr. 2009, 16:50
par naholyr
C'est une fonctionnalité du langage qui peut permettre de répondre de manière simple à des besoins de factorisation que l'objet (qui en permet déjà beaucoup) ne permet pas (hors héritage multiple dont l'implémentation risque toujours d'être douteuse).

Posté : 24 févr. 2009, 17:22
par Hywan
@Sékil : je comprends de quoi tu te plains. C'est vrai qu'inventer une nouvelle structure commence à alourdir le langage (surtout niveau syntaxe … le mot-clé trait, ça va, mais les use à gogo pff …). Par contre, ça ne me dérange pas qu'on ait les interfaces, les classes et les espaces de noms. C'est presque le minimum requit (sauf pour les interfaces). On va dire que l'idée est bonne mais pas la notation …

@Katagoto : « depuis le temps que je l'attend » (un « s » a « attends » … … …), euh, je développe beaucoup en objet et j'ai rarement eu besoin de ça. C'est un cas assez particulier (sans être forcément très très rare). Comme je l'ai dit, dans la plupart des cas, on peut contourner le problème de façon très propre. Tu as un exemple où tu n'as pas pu contourner le problème ?

@Naholyr : bah justement, je ne sais pas si l'héritage multiple est si lourd que ça :-k … Faudrait que je me penche sur les algos plus sérieusement un jour.

Posté : 24 févr. 2009, 18:09
par katagoto
Merci, en PHP je n'ai pas d'exemple malheureusement car depuis neuf mois je développe classique (je distingue deux but dans le code le premier, classique, n'implique aucun algorithme, ou de très simple, le second, je l'appel recherche, car j'entre dans un milieu inconnu que je tente de maitriser...), mais, il y a environs 6 mois, juste avant la reprise, je tentait de manipuler BOOST.Spirit (en C++), j'avais un double but : avoir une classe abstraite pour pouvoir me servir de ses filles car je devait les agencer dans un tableau et les appeler à "loisir" et je devais faire en sorte qu'elle soit fille d'une autre classe abstraite qui doit être directement mère pour être utilisé par BOOST.Spirit, d'où le fait que l'héritage multiple est une chose que j'attendais...

Voilà

Posté : 24 févr. 2009, 18:18
par Hywan
Sauf qu'en C++, tu as l'héritage multiple (avec contexte, i.e. public, protégé et privé) :-P.

Posté : 24 févr. 2009, 18:23
par katagoto
Oui, justement, c'est pour ça que je l'attendais dans PHP :roll:

Posté : 24 févr. 2009, 20:45
par Berzemus
pfff, moi je dis, un jour il vont nous mettre un bon vieux GOTO en php, et tout le monde sera bien.

D'ailleurs, en fait, c'est déjà fait.

Posté : 25 févr. 2009, 10:06
par Sodams
pfff, moi je dis, un jour il vont nous mettre un bon vieux GOTO en php, et tout le monde sera bien.

D'ailleurs, en fait, c'est déjà fait.
Cela ne peut que améliorer la visibilité du code :D

Posté : 25 févr. 2009, 11:29
par stopher
Perso , je trouve que c'est une fonctionnalité intéressante .
Source d'erreurs certes , mais qui reste utile si on l'utilise bien ..

Tout comme la programmation objet ... si l'on utilises des classes pour dire de faire de l'objet sans avoir réfléchi à la structure .. et bien cela revient à utiliser les traits là ou il n'y en a pas besoin ,
donc alourdir la lisibilité , maintenance ect ...

Aller , on va pas râler que notre langage préféré évolue :-) :D

Posté : 25 févr. 2009, 11:39
par Hywan
Sauf pour les goto:roll:.

Posté : 25 févr. 2009, 12:12
par @rthur
pfff, moi je dis, un jour il vont nous mettre un bon vieux GOTO en php, et tout le monde sera bien.

D'ailleurs, en fait, c'est déjà fait.
ça a même été intégré dans PHP 5.3:
http://fr.php.net/goto

Posté : 25 févr. 2009, 12:38
par katagoto
Euh, à quoi ça sert goto ?

Posté : 25 févr. 2009, 13:18
par Berzemus
Euh, à quoi ça sert goto ?
A revenir 30 ans en arrière.

Heureusement que ça ne se sait pas trop. Un débutant qui découvrirait ça deviendrait vite complètement corrompu, s'il n'est pas mis en garde correctement.