• [^] # Re: Removed legacy features:

    Posté par (site web personnel) . En réponse au journal PHP 5.4 Alpha 1 est annoncé. Évalué à 5.

    Par contre, PHP 5.4 ajoute les "Traits" ("Horizontal Reuse for PHP"), un truc qui ressemble à de l'héritage multiple (ou un hack pour arriver au même résultat selon moi) :
    https://wiki.php.net/rfc/horizontalreuse

    Comme pour l'ajout des espaces de nommage avec leur syntaxe surprenante et une utilisation peu aisée, cette nouvelle fonctionnalité (son implémentation, sa syntaxe) me laisse perplexe. Durant l'héritage (bloc "use"), on peut changer le nom des méthodes, leur visibilité (public / private / protected), et gérer manuellement la gestion des conflits (si deux "traits" ont des fonctions (méthodes ?) qui ont le même nom). Exemple extrait de la RFC :

    <?php
     class Talker {
     use A, B {
     B::smallTalk insteadof A;
     A::bigTalk insteadof B;
     B::bigTalk as talk;
     }
     }
     ?>
    

    Python a opéré un changement radical dans Python 2.3 pour corriger des bugs tordus liés à l'héritage multiple. Un nouveau type de classe (new-style class) a été introduit pour implémenter une nouvelle méthode de résolution des méthodes (MRO, method resolution order) : C3 Method Resolution Order. Vieille documentation avec de jolis serpents en ASCII Art :
    http://www.python.org/download/releases/2.3/mro/

    Avec Python 3, les old-style class ont disparu : toutes les classes utilisent l'algorithme C3. Perl 6 et Parrot utilisent également C3, Perl 5.10 peut l'utiliser de manière optionnelle.
    http://en.wikipedia.org/wiki/C3_linearization

    Guido raconte comment Python est passé de son algo de MRO maison à C3 :
    http://python-history.blogspot.com/2010/06/method-resolution-order.html

    Les traits PHP me font plus penser aux mixins Ruby (que je ne connais pas).
    http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html

    Mais bon, l'héritage multiple et les mixins semblent être trop compliqués pour un développeur PHP (extrait de la RFC PHP) :
    To circumvent this problems multiple inheritance and Mixins have been invented. But both of them are complex and hard to understand. PHP5 has been explicitly designed with the clean and successful model of Java in mind: single inheritance, but multiple interfaces.