Traits : de la théorie à la pratique            Rendez-vous AFUP            15 décembre 2010                  Paris       ...
Traits : de la théorie à la pratique           À propos du conférencier●   Frédéric Hardy.●   35 ans, marié, 3 enfants.●  ...
Traits : de la théorie à la pratique Déroulement de la conférence     ●   Prés-requis     ●   Résumé de la théorie     ●  ...
Traits : de la théorie à la pratique                             Pré-requis    ●   PHP ≥ 5.next    ●   En attendant la sor...
Traits : de la théorie à la pratique                 Résumé de la théorie●   Les traits sont :    –   Une évolution du mod...
Traits : de la théorie à la pratique              Cas pratique     ●   Atoum         –   Framework de tests             un...
Traits : de la théorie à la pratique                Comment tester le code suivant ?  <?php  namespace vendorproject;  cla...
Traits : de la théorie à la pratique                     Il y a plusieurs solutions                 ●   Utiliser un systèm...
Traits : de la théorie à la pratique                    Atoum utilise ladaptateur     ●   Ladaptateur est souple :        ...
Traits : de la théorie à la pratique                    Le code du test unitaire  <?php  ...  class myClassTest extends at...
Traits : de la théorie à la pratique                  Le code de la classe testée  <?php  ...  class myClass {      public...
Traits : de la théorie à la pratique         Les conséquences sur le modèle objet     ●   Il est impossible de prédire les...
Traits : de la théorie à la pratique      Et si on tirait un trait sur la duplication ?           ●   Via la définition du...
Traits : de la théorie à la pratique                         Définition du trait  <?php  namespace mageekguyatoumtraits;  ...
Traits : de la théorie à la pratique                       Utilisation du trait     ●   Suppression dans les classes conce...
Traits : de la théorie à la pratique                        Quelques remarques     ●   Un trait est considéré comme une cl...
Traits : de la théorie à la pratique                          Performances      ●   Sans trait :  >   Total tests duration...
Traits : de la théorie à la pratique                Comment tester un trait ?●   Un trait ne peut être instancié, il nest ...
Traits : de la théorie à la pratique               Les traits et lAPI dintrospection     ●   reflectionClass::isTrait().  ...
Traits : de la théorie à la pratique                            Exemple dutilisation   # vi path/to/reflection.php   <?php...
Traits : de la théorie à la pratique                            Résultat de lexemple   # path/to/php5.4 path/to/reflection...
Traits : de la théorie à la pratique                      Tester un trait avec Atoum   <?php   ...   class test extends at...
Traits : de la théorie à la pratique                Les inconvénients●   Les traits augmentent lempreinte mémoire.●   Lint...
Traits : de la théorie à la pratique                            Conclusion●   Les traits sont une évolution du modèle obje...
Traits : de la théorie à la pratique           Questions ?                                       25
Traits : de la théorie à la pratique                            Références●   http://wiki.php.net/rfc/horizontalreuse●   h...
Traits : de la théorie à la pratique                          Remerciements ●   Merci à Stephan Marr, pour avoir implément...
Prochain SlideShare
Chargement dans…5
×

Traits : de la théorie à la pratique

2 471 vues

Publié le

0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 471
Sur SlideShare
0
Issues des intégrations
0
Intégrations
18
Actions
Partages
0
Téléchargements
12
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Traits : de la théorie à la pratique

  1. 1. Traits : de la théorie à la pratique Rendez-vous AFUP 15 décembre 2010 Paris La Cantine Frédéric Hardy frederic.hardy@mageekbox.net http://blog.mageekbox.net @mageekguy
  2. 2. Traits : de la théorie à la pratique À propos du conférencier● Frédéric Hardy.● 35 ans, marié, 3 enfants.● Développeur PHP depuis plus de 10 ans.● Participe au développement du langage depuis plus de 5 ans.● Contributeur et développeur de plusieurs projets libres.● Architecte logiciel chez PMSIpilot à Lyon.
  3. 3. Traits : de la théorie à la pratique Déroulement de la conférence ● Prés-requis ● Résumé de la théorie ● Cas pratique ● Performances ● Comment tester un trait ? ● Les inconvénients ● Conclusion ● Questions
  4. 4. Traits : de la théorie à la pratique Pré-requis ● PHP ≥ 5.next ● En attendant la sortie de 5.next, il faut utiliser la version de développement de PHP :# svn export http://svn.php.net/repository/php/php-src/trunk# cd path/to/trunk# ./buildconf# ./configure# make ● Pour installer la version de développement ou remplacer la version installée :# make install
  5. 5. Traits : de la théorie à la pratique Résumé de la théorie● Les traits sont : – Une évolution du modèle objet de PHP. – Une alternative à lhéritage multiple et au mixin.● Ils permettent déviter la duplication de code. – Via le « copier/coller » de méthodes lors de la compilation.● La résolution des conflits est de la responsabilité du développeur.
  6. 6. Traits : de la théorie à la pratique Cas pratique ● Atoum – Framework de tests unitaires. – Utilise à plein PHP 5.3 ● Fonctions anonyme. ● Fermetures. – Simple et intuitif. ● Interface fluide. ● Aucune configuration. ● Exécution directe.
  7. 7. Traits : de la théorie à la pratique Comment tester le code suivant ? <?php namespace vendorproject; class myClass { public function readFile($file) { $content = file_get_contents($file); if ($content === false) { throw new exception(Unable to read file . $file); } return $content; } } ... ?>Cas pratique
  8. 8. Traits : de la théorie à la pratique Il y a plusieurs solutions ● Utiliser un système de fichiers : – réel. – virtuel. ● Utiliser un objet : – Bouchon. – Adaptateur.Cas pratique
  9. 9. Traits : de la théorie à la pratique Atoum utilise ladaptateur ● Ladaptateur est souple : – Les « fonctions » deviennent « programmables ». – Le développeur a le contrôle total. ● Ladaptateur est générique : – Il fonctionne avec toutes les fonctions PHP. ● Il permet de contrôler lensemble des fonctions PHP sans développement supplémentaire. ● Il est simple à mettre en œuvre.Cas pratique
  10. 10. Traits : de la théorie à la pratique Le code du test unitaire <?php ... class myClassTest extends atoumtest { public function testReadFile() { $myClass = new vendorprojectmyclass(); $myClass->setAdapter($adapter = new atoumadapter()); $adapter->file_get_contents = false; $this->assert ->exception(function() use ($myClass, & $file) { $myClass->readFile($file = uniqid()); } ) ->isInstanceOf(runtimeException) ->hasMessage(Unable to read file . $file) ; } } ... ?>Cas pratique
  11. 11. Traits : de la théorie à la pratique Le code de la classe testée <?php ... class myClass { public function setAdapter(atoumadapter $adapter) { $this->adapter = $adapter; return $this; } public function getAdapter() { return $adapter; } public function readFile($file) { $content = $this->adapter->file_get_contents($file); ... } } ... ?>Cas pratique
  12. 12. Traits : de la théorie à la pratique Les conséquences sur le modèle objet ● Il est impossible de prédire les classes qui devront recourir à ladaptateur. ● Il faut donc dupliquer au besoin dans les classes qui utilise ladaptateur le code des méthodes : – setAdapter(atoumadapter $adapter). – GetAdapter().Cas pratique
  13. 13. Traits : de la théorie à la pratique Et si on tirait un trait sur la duplication ? ● Via la définition dun trait « adapter ». – Injectable en fonction des besoins. ● Il ny a plus de duplication de code. – La maintenance est simplifiée. – Les possibilités dévolution sont augmentées.Cas pratique
  14. 14. Traits : de la théorie à la pratique Définition du trait <?php namespace mageekguyatoumtraits; use mageekguyatoum; trait adapter { public function setAdapter(atoumadapter $adapter) { $this->adapter = $adapter; return $this; } public function getAdapter() { return $this->adapter; } } ?>Cas pratique
  15. 15. Traits : de la théorie à la pratique Utilisation du trait ● Suppression dans les classes concernées de – setAdapter(). – getAdapter(). ● Utilisation du trait dans les classes concernées. <?php ... abstract class test implements observable, countable { use atoumtraitsadapter; ... } ... ?>Cas pratique
  16. 16. Traits : de la théorie à la pratique Quelques remarques ● Un trait est considéré comme une classe. – L « autoloading » est donc activé si un trait nest pas défini lorsquil est appelé. ● Les traits sont compatibles avec les espaces de noms. ● Lappel à un trait via use peut se faire à lendroit de son choix dans une classe. ● Il nest pas possible dhériter dun trait. ● Un trait ne peut hériter dun autre trait.Cas pratique
  17. 17. Traits : de la théorie à la pratique Performances ● Sans trait : > Total tests duration: 2.17 seconds. > Total tests memory usage: 25.75 Mb. > Running duration: 10.87 seconds. > Success (63 tests, 264 methods, 3980 assertions) ! ● Avec trait : > Total tests duration: 2.15 seconds. > Total tests memory usage: 28.25 Mb. > Running duration: 11.00 seconds. > Success (63 tests, 264 methods, 3980 assertions) !Cas pratique
  18. 18. Traits : de la théorie à la pratique Comment tester un trait ?● Un trait ne peut être instancié, il nest donc pas testable par lui-même.● Il doit être injecté dans un classe. – Il est donc testable par transitivité. ● Tout comme les méthodes privées et protégées.● Le support dun trait par un classe peut être testé à laide de lAPI dintrospection de PHP.
  19. 19. Traits : de la théorie à la pratique Les traits et lAPI dintrospection ● reflectionClass::isTrait(). ● reflectionClass::getTraits(). ● reflectionClass::getTraitNames(). ● reflectionClass::getTraitAliases().Comment tester un trait ?
  20. 20. Traits : de la théorie à la pratique Exemple dutilisation # vi path/to/reflection.php <?php $class = new reflectionClass(mageekguyatoumtest); $traits = $class->getTraits(); var_dump($traits); foreach ($traits as $trait) { var_dump($trait->getMethods()); } ?>Comment tester un trait ?
  21. 21. Traits : de la théorie à la pratique Résultat de lexemple # path/to/php5.4 path/to/reflection.php array(1) { ["mageekguyatoumtraitsadapter"]=> &object(ReflectionClass)#57 (1) { ["name"]=> string(30) "mageekguyatoumtraitsadapter" } } array(2) { [0]=> &object(ReflectionMethod)#56 (2) { ["name"]=> string(10) "setAdapter" ["class"]=> string(30) "mageekguyatoumtraitsadapter" } ... }Comment tester un trait ?
  22. 22. Traits : de la théorie à la pratique Tester un trait avec Atoum <?php ... class test extends atoumtest { public function testClass() { $this->assert ->class($this->getTestedClassName()) ->useTrait(mageekguyatoumtraitsadapter) ->trait(mageekguyatoumtraitsadapter) ->hasMethod(setAdapter) ->hasMethod(getAdapter) ; } public function testSetAdapter() {...} public function testGetAdapter() {...} } ... ?>Comment tester un trait ?
  23. 23. Traits : de la théorie à la pratique Les inconvénients● Les traits augmentent lempreinte mémoire.● Lintégration dans les IDE nest pas encore effective.● La relecture du code est plus « laborieuse ».● Ils ne sont disponibles quà partir de PHP ≥ 5.4 alors que PHP 5.3 nest pas encore démocratisé.
  24. 24. Traits : de la théorie à la pratique Conclusion● Les traits sont une évolution du modèle objet de PHP : – qui permet de supprimer la duplication de code, – via un mécanisme de « copier/coller » à la compilation, – sous le contrôle du développeur, – simple à mettre en œuvre, – testable via linstrospection, ● mais consommatrice de mémoire, ● et qui nest pas supporté par les IDE, ● ce qui peut compliquer laudit du code, ● et qui nest pas encore officiellement disponible.
  25. 25. Traits : de la théorie à la pratique Questions ? 25
  26. 26. Traits : de la théorie à la pratique Références● http://wiki.php.net/rfc/horizontalreuse● http://9elements.com/io/?p=28● http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits● http://blog.runpac.com/post/php-point-sur-traits-trunk 26
  27. 27. Traits : de la théorie à la pratique Remerciements ● Merci à Stephan Marr, pour avoir implémenté les traits dans PHP. ● Merci à lAFUP pour son invitation. ● Merci à PMSIpilot de mavoir permis de faire cette conférence.Cette conférence est maintenant terminée, vous pouvez reprendre une activité normale. frederic.hardy@mageekbox.net http://blog.mageekbox.net @mageekguy 27

×