SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
Programmation orientée Objet
          Vers php 5.4
Réduire le couplage
applicatif grâce aux Traits
(mauvaise) définition scolaire de l'objet




• Un objet est une
 représentation concrète d'un
 concept abstrait
Une classe


• Contient des attributs et des méthodes dont la portée
 peut être limitée

• Un seul héritage pour n interfaces
• Une méthode est identifiée par sa signature
La signature
/**

* description de la méthode

*

* @access public

* @param integer $nombre

* @return string

*/

public function example($nombre) {

    return "une chaîne";

}
L'interface
• Permet de s'assurer que les objets manipulés
    fonctionnent de la même manière

                              => Contrat




Public fonction utilise(interfaceStylo $stylo) {

}
La Php Standard Library
Class CountMe implements Countable {

  Public fonction count() { 

       Return 5;
• Ou SPL
  }

• Permet d'ajouter des fonctionnalités à des objets
}

$object = new CountMe;
• Exemple : l'interface countable
echo sizeof($object); // 5
Fail
Un objet c'est pas ça !
Pas une représentation concrète




• On n'a jamais vu un "lanceur de requête Sql" dans la
 vraie vie
Repenser la définition d'un objet
Un objet est un comportement


• Un objet est un comportement vis à vis de
 données 

• L'agrégat des comportements constitue une
 application
L'héritage
• Spécialisation d'un
 comportement

• Une classe fille peut
 réutiliser ou spécialiser le
 comportement de sa
 classe mère

• Pas d'héritage multiple en
 PHP
L'héritage échoue
    Pour 2 raisons
1/ spécialiser n'est pas décliner



• Souvent on ne spécialise
  pas, on décline

• C'est infini !
2/ l'héritage "outil"
• L'héritage ne doit pas permettre de donner des outils

             Class Example extends Singleton {}

              => ça ne doit pas exister !!
Le couplage applicatif
       (petit détour)
Code spagethi


• Dépendances fortes entre les
 composants

• Tout est entremêlé
• Maintenabilité faible
le couplage applicatif
• Principe SOLID
     • Single Responsability
     • Open / closes
     • Liskov substitution
     Couplage faible
     • Interface segregation
     • Dépendency inversion
Horizontalité vs Verticalité
• Un modèle vertical (type héritage mal conçu) n'est
 pas maintenable

• Penser horizontal :
         • Pattern Strategy
         • Injection de dépendance
Les Traits
 (pas trop tôt)
Blocs de comportement
• Réutilisables 
• Modèle orienté collaboration

Class Example {

    Use Trait1, Trait2;

}
À l'origine : les mixins

• Composants liés à la réutilisation plutôt qu'à
 l'instanciation

• Sont mélangés au code (mixed-in)
• Injectés dans le code au moment de l'héritage
• Conflits entre les mixins
Les Traits

• Réutilisation de fonctionnalités au niveau des
 classes

• L'ensemble des méthodes d'un Trait constituent son
 comportement

• Sans État
Gestion des conflits
• Pas de priorité implicite
Class Example {

    Use Trait1, Trait2 {

         Trait2::myMethod as m;
         • Résolution explicite
         Trait1::any insteadof Trait2
    des conflits
    }

}
Traits composites



• Un Trait peut être composé d'autres Traits
• On parle alors de Traits composites
Trait Singleton {
                                              
     /**
                                                  /**
     * Constructor
                                                   * Prevents cloning
     */
                                                   * @throws Exception
    protected function __construct() {}
                                                   */
     /**
                                                  public function __clone() {
     * Get singleton instance
                                                      throw new Exception('Cloning of this object isn't
     * @return static
                        authorized');

     */
                                          }


                                             
    public static function getInstance() {
       /**

        static $instance = null;
                  * Prevents deserialization

        if (is_null($instance)) {
                 * @throws Exception

            $instance = new static;
               */

        }
                                        public function __wakeup() {

        return $instance;
                            throw new Exception("Cannot deserialize instance
                                              of Singleton pattern in" . get_called_class());
    }
                                                  }
 
                                              }
class Example extends MaClasseMetier {

    use Singleton;

}

$oExample = Example::getInstance();

var_dump($oExample === Example::getInstance());

// true

$oExample = new Example;

// Fatal error: Call to protected Example::__construct() from invalid
context
Et c'est pas plus lent
1150


1145


1140


1135


1130
        heritage   1 trait   4 traits
Liens et ressources
Sur le net
RFC des traits : https://wiki.php.net/rfc/horizontalreuse

Recherches d'Alexandre Bergel : http://bergel.eu
Questions

Más contenido relacionado

La actualidad más candente

Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchronesAbdoulaye Dieng
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql courszan
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POOmazenovi
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...Tarik Zakaria Benmerar
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptMicrosoft Technet France
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++Abdoulaye Dieng
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partiekadzaki
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de baseAbdoulaye Dieng
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partiekadzaki
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objetsAbdoulaye Dieng
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 

La actualidad más candente (20)

Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
 
Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POO
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
 
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 
Cours php
Cours phpCours php
Cours php
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++
 
Cours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partie
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de base
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partie
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objets
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 

Destacado

Outils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderneOutils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web modernehalleck45
 
Louaize bc higher education in lebanon french
Louaize bc higher education in lebanon frenchLouaize bc higher education in lebanon french
Louaize bc higher education in lebanon frenchIAU_Past_Conferences
 
projet sparte alexandre atlan
projet sparte alexandre atlanprojet sparte alexandre atlan
projet sparte alexandre atlanclimberboy1999
 
Juridica dévoile sa nouvelle stratégie aux Journées du Courtage
Juridica dévoile sa nouvelle stratégie aux Journées du CourtageJuridica dévoile sa nouvelle stratégie aux Journées du Courtage
Juridica dévoile sa nouvelle stratégie aux Journées du CourtageJURIDICA_JUSTE_POUR_VOUS
 
Louaize bc notre dame de louaize introduction vf w
Louaize bc notre dame de louaize introduction vf wLouaize bc notre dame de louaize introduction vf w
Louaize bc notre dame de louaize introduction vf wIAU_Past_Conferences
 
L'ordre du jour de l'AG Dexia
L'ordre du jour de l'AG DexiaL'ordre du jour de l'AG Dexia
L'ordre du jour de l'AG Dexialesoirbe
 
French Right of REVOLUTION & Political CORRUPTION
French   Right of REVOLUTION & Political CORRUPTIONFrench   Right of REVOLUTION & Political CORRUPTION
French Right of REVOLUTION & Political CORRUPTIONVogelDenise
 
Expert folder Juin FR
Expert folder Juin FRExpert folder Juin FR
Expert folder Juin FRExpert
 
présidentielle : les votes en Belgique
présidentielle : les votes en Belgiqueprésidentielle : les votes en Belgique
présidentielle : les votes en Belgiquelesoirbe
 
Louaize bc notre dame de louaize introduction vf
Louaize bc notre dame de louaize introduction vfLouaize bc notre dame de louaize introduction vf
Louaize bc notre dame de louaize introduction vfIAU_Past_Conferences
 
DoYouSEO Camp mtl #2
DoYouSEO Camp mtl #2DoYouSEO Camp mtl #2
DoYouSEO Camp mtl #2DoYouSEO
 
Conférence Nationale sur le projet de Document de Politique Linguistique du M...
Conférence Nationale sur le projet de Document de Politique Linguistique du M...Conférence Nationale sur le projet de Document de Politique Linguistique du M...
Conférence Nationale sur le projet de Document de Politique Linguistique du M...Boukary Konate
 
Qinghai tibet al.ppt
Qinghai tibet al.pptQinghai tibet al.ppt
Qinghai tibet al.pptmouniert
 

Destacado (20)

Outils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderneOutils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderne
 
Louaize bc higher education in lebanon french
Louaize bc higher education in lebanon frenchLouaize bc higher education in lebanon french
Louaize bc higher education in lebanon french
 
projet sparte alexandre atlan
projet sparte alexandre atlanprojet sparte alexandre atlan
projet sparte alexandre atlan
 
Intervention Guides Viatao - Festival Icare2011
Intervention Guides Viatao - Festival Icare2011Intervention Guides Viatao - Festival Icare2011
Intervention Guides Viatao - Festival Icare2011
 
FRANCE
FRANCEFRANCE
FRANCE
 
Juridica dévoile sa nouvelle stratégie aux Journées du Courtage
Juridica dévoile sa nouvelle stratégie aux Journées du CourtageJuridica dévoile sa nouvelle stratégie aux Journées du Courtage
Juridica dévoile sa nouvelle stratégie aux Journées du Courtage
 
Louaize bc notre dame de louaize introduction vf w
Louaize bc notre dame de louaize introduction vf wLouaize bc notre dame de louaize introduction vf w
Louaize bc notre dame de louaize introduction vf w
 
Trame globale session pro intro et intervenants - Festival Icare2011
Trame globale session pro intro et intervenants - Festival Icare2011Trame globale session pro intro et intervenants - Festival Icare2011
Trame globale session pro intro et intervenants - Festival Icare2011
 
Yves Beauchamp
Yves BeauchampYves Beauchamp
Yves Beauchamp
 
L'ordre du jour de l'AG Dexia
L'ordre du jour de l'AG DexiaL'ordre du jour de l'AG Dexia
L'ordre du jour de l'AG Dexia
 
Advertisement notes
Advertisement notesAdvertisement notes
Advertisement notes
 
French Right of REVOLUTION & Political CORRUPTION
French   Right of REVOLUTION & Political CORRUPTIONFrench   Right of REVOLUTION & Political CORRUPTION
French Right of REVOLUTION & Political CORRUPTION
 
Conf epsylon
Conf epsylonConf epsylon
Conf epsylon
 
Expert folder Juin FR
Expert folder Juin FRExpert folder Juin FR
Expert folder Juin FR
 
présidentielle : les votes en Belgique
présidentielle : les votes en Belgiqueprésidentielle : les votes en Belgique
présidentielle : les votes en Belgique
 
9782212127829
97822121278299782212127829
9782212127829
 
Louaize bc notre dame de louaize introduction vf
Louaize bc notre dame de louaize introduction vfLouaize bc notre dame de louaize introduction vf
Louaize bc notre dame de louaize introduction vf
 
DoYouSEO Camp mtl #2
DoYouSEO Camp mtl #2DoYouSEO Camp mtl #2
DoYouSEO Camp mtl #2
 
Conférence Nationale sur le projet de Document de Politique Linguistique du M...
Conférence Nationale sur le projet de Document de Politique Linguistique du M...Conférence Nationale sur le projet de Document de Politique Linguistique du M...
Conférence Nationale sur le projet de Document de Politique Linguistique du M...
 
Qinghai tibet al.ppt
Qinghai tibet al.pptQinghai tibet al.ppt
Qinghai tibet al.ppt
 

Similar a Programmation Orientée Objet et les Traits en PHP 5.4

Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objetAmir Souissi
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationECAM Brussels Engineering School
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objetsAbdoulaye Dieng
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPfrwebhelp
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonAbdoulaye Dieng
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratiqueFrederic Hardy
 
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxfdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxTarikElMahtouchi1
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web5pidou
 

Similar a Programmation Orientée Objet et les Traits en PHP 5.4 (20)

POO
POOPOO
POO
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
jpa.pdf
jpa.pdfjpa.pdf
jpa.pdf
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Memo java
Memo javaMemo java
Memo java
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APP
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
Clonage d'objets
Clonage d'objetsClonage d'objets
Clonage d'objets
 
Traits : de la théorie à la pratique
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratique
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxfdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
 
Introduction à JPA (Java Persistence API )
Introduction à JPA  (Java Persistence API )Introduction à JPA  (Java Persistence API )
Introduction à JPA (Java Persistence API )
 
test doc
test doctest doc
test doc
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 

Programmation Orientée Objet et les Traits en PHP 5.4

  • 3. (mauvaise) définition scolaire de l'objet • Un objet est une représentation concrète d'un concept abstrait
  • 4. Une classe • Contient des attributs et des méthodes dont la portée peut être limitée • Un seul héritage pour n interfaces • Une méthode est identifiée par sa signature
  • 5. La signature /** * description de la méthode * * @access public * @param integer $nombre * @return string */ public function example($nombre) { return "une chaîne"; }
  • 6. L'interface • Permet de s'assurer que les objets manipulés fonctionnent de la même manière => Contrat Public fonction utilise(interfaceStylo $stylo) { }
  • 7. La Php Standard Library Class CountMe implements Countable { Public fonction count() { Return 5; • Ou SPL } • Permet d'ajouter des fonctionnalités à des objets } $object = new CountMe; • Exemple : l'interface countable echo sizeof($object); // 5
  • 9. Pas une représentation concrète • On n'a jamais vu un "lanceur de requête Sql" dans la vraie vie
  • 11. Un objet est un comportement • Un objet est un comportement vis à vis de données • L'agrégat des comportements constitue une application
  • 12. L'héritage • Spécialisation d'un comportement • Une classe fille peut réutiliser ou spécialiser le comportement de sa classe mère • Pas d'héritage multiple en PHP
  • 13. L'héritage échoue Pour 2 raisons
  • 14. 1/ spécialiser n'est pas décliner • Souvent on ne spécialise pas, on décline • C'est infini !
  • 15. 2/ l'héritage "outil" • L'héritage ne doit pas permettre de donner des outils Class Example extends Singleton {} => ça ne doit pas exister !!
  • 16. Le couplage applicatif (petit détour)
  • 17. Code spagethi • Dépendances fortes entre les composants • Tout est entremêlé • Maintenabilité faible
  • 18. le couplage applicatif • Principe SOLID • Single Responsability • Open / closes • Liskov substitution Couplage faible • Interface segregation • Dépendency inversion
  • 19. Horizontalité vs Verticalité • Un modèle vertical (type héritage mal conçu) n'est pas maintenable • Penser horizontal : • Pattern Strategy • Injection de dépendance
  • 20. Les Traits (pas trop tôt)
  • 21. Blocs de comportement • Réutilisables • Modèle orienté collaboration Class Example { Use Trait1, Trait2; }
  • 22. À l'origine : les mixins • Composants liés à la réutilisation plutôt qu'à l'instanciation • Sont mélangés au code (mixed-in) • Injectés dans le code au moment de l'héritage • Conflits entre les mixins
  • 23. Les Traits • Réutilisation de fonctionnalités au niveau des classes • L'ensemble des méthodes d'un Trait constituent son comportement • Sans État
  • 24. Gestion des conflits • Pas de priorité implicite Class Example { Use Trait1, Trait2 { Trait2::myMethod as m; • Résolution explicite Trait1::any insteadof Trait2 des conflits } }
  • 25. Traits composites • Un Trait peut être composé d'autres Traits • On parle alors de Traits composites
  • 26. Trait Singleton { /**     /**      * Constructor      * Prevents cloning      */      * @throws Exception     protected function __construct() {}      */      /**     public function __clone() {      * Get singleton instance         throw new Exception('Cloning of this object isn't      * @return static authorized');      */     }     public static function getInstance() {     /**         static $instance = null;      * Prevents deserialization         if (is_null($instance)) {      * @throws Exception             $instance = new static;      */         }     public function __wakeup() {         return $instance;         throw new Exception("Cannot deserialize instance of Singleton pattern in" . get_called_class());     }     }   }
  • 27. class Example extends MaClasseMetier {     use Singleton; } $oExample = Example::getInstance(); var_dump($oExample === Example::getInstance()); // true $oExample = new Example; // Fatal error: Call to protected Example::__construct() from invalid context
  • 28. Et c'est pas plus lent 1150 1145 1140 1135 1130 heritage 1 trait 4 traits
  • 30. Sur le net RFC des traits : https://wiki.php.net/rfc/horizontalreuse Recherches d'Alexandre Bergel : http://bergel.eu