Programmation Orientée Objet et les Traits en PHP 5.4

H
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
1 of 31

Recommended

Exploiter php 5 by
Exploiter php 5Exploiter php 5
Exploiter php 5halleck45
3.6K views43 slides
Programmation orientée objet en PHP 5 by
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Kristen Le Liboux
14K views69 slides
php2 : formulaire-session-PDO by
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
1.9K views25 slides
Notions de base de JavaScript by
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
6.7K views49 slides
.php1 : les fondamentaux du PHP by
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHPAbdoulaye Dieng
1.4K views32 slides
Introduction au Jquery by
Introduction au JqueryIntroduction au Jquery
Introduction au JqueryAbdoulaye Dieng
822 views19 slides

More Related Content

What's hot

Introduction à Python by
Introduction à PythonIntroduction à Python
Introduction à PythonAbdoulaye Dieng
2K views33 slides
Requêtes HTTP synchrones et asynchrones by
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchronesAbdoulaye Dieng
5.7K views29 slides
Php mysql cours by
Php mysql coursPhp mysql cours
Php mysql courszan
1.9K views33 slides
Cours javascript v1 by
Cours javascript v1Cours javascript v1
Cours javascript v1TheBest Icanbe
2.7K views88 slides
Introduction à JavaScript by
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
762 views51 slides
PHP5 - POO by
PHP5 - POOPHP5 - POO
PHP5 - POOmazenovi
1.3K views41 slides

What's hot(20)

Requêtes HTTP synchrones et asynchrones by Abdoulaye Dieng
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
Abdoulaye Dieng5.7K views
Php mysql cours by zan
Php mysql coursPhp mysql cours
Php mysql cours
zan1.9K views
Introduction à JavaScript by Microsoft
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
Microsoft762 views
PHP5 - POO by mazenovi
PHP5 - POOPHP5 - POO
PHP5 - POO
mazenovi1.3K views
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen... by Tarik Zakaria Benmerar
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...
cpp1 : Quelques elements de base du C++ by Abdoulaye Dieng
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++
Abdoulaye Dieng495 views
Cours php & Mysql - 4éme partie by kadzaki
Cours php & Mysql - 4éme partieCours php & Mysql - 4éme partie
Cours php & Mysql - 4éme partie
kadzaki2.6K views
Symfony2 - Un Framework PHP 5 Performant by Hugo Hamon
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
Hugo Hamon3.1K views
Initiation à l'algorithmique by Abdoulaye Dieng
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
Abdoulaye Dieng1.1K views
Csharp1 : quelques elements de base by Abdoulaye Dieng
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de base
Abdoulaye Dieng401 views
Cours php & Mysql - 2éme partie by kadzaki
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partie
kadzaki3.3K views
Javascript un langage supérieur by Fredy Fadel
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
Fredy Fadel1.7K views

Viewers also liked

Outils et pratiques : tester une application web moderne by
Outils et pratiques : tester une application web moderneOutils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web modernehalleck45
2.4K views32 slides
Louaize bc higher education in lebanon french by
Louaize bc higher education in lebanon frenchLouaize bc higher education in lebanon french
Louaize bc higher education in lebanon frenchIAU_Past_Conferences
392 views3 slides
projet sparte alexandre atlan by
projet sparte alexandre atlanprojet sparte alexandre atlan
projet sparte alexandre atlanclimberboy1999
876 views11 slides
Intervention Guides Viatao - Festival Icare2011 by
Intervention Guides Viatao - Festival Icare2011Intervention Guides Viatao - Festival Icare2011
Intervention Guides Viatao - Festival Icare2011Office de Tourisme de Brive et son pays
723 views21 slides
FRANCE by
FRANCEFRANCE
FRANCELeonie Schoppema
530 views50 slides
Juridica dévoile sa nouvelle stratégie aux Journées du Courtage by
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
946 views19 slides

Viewers also liked(20)

Outils et pratiques : tester une application web moderne by halleck45
Outils et pratiques : tester une application web moderneOutils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderne
halleck452.4K views
projet sparte alexandre atlan by climberboy1999
projet sparte alexandre atlanprojet sparte alexandre atlan
projet sparte alexandre atlan
climberboy1999876 views
L'ordre du jour de l'AG Dexia by lesoirbe
L'ordre du jour de l'AG DexiaL'ordre du jour de l'AG Dexia
L'ordre du jour de l'AG Dexia
lesoirbe1.1K views
French Right of REVOLUTION & Political CORRUPTION by VogelDenise
French   Right of REVOLUTION & Political CORRUPTIONFrench   Right of REVOLUTION & Political CORRUPTION
French Right of REVOLUTION & Political CORRUPTION
VogelDenise560 views
Expert folder Juin FR by Expert
Expert folder Juin FRExpert folder Juin FR
Expert folder Juin FR
Expert684 views
présidentielle : les votes en Belgique by lesoirbe
présidentielle : les votes en Belgiqueprésidentielle : les votes en Belgique
présidentielle : les votes en Belgique
lesoirbe498 views
DoYouSEO Camp mtl #2 by DoYouSEO
DoYouSEO Camp mtl #2DoYouSEO Camp mtl #2
DoYouSEO Camp mtl #2
DoYouSEO1.8K views
Conférence Nationale sur le projet de Document de Politique Linguistique du M... by Boukary Konate
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 Konate1.8K views
Qinghai tibet al.ppt by mouniert
Qinghai tibet al.pptQinghai tibet al.ppt
Qinghai tibet al.ppt
mouniert607 views

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

POO by
POOPOO
POOإيمان الله
1.9K views39 slides
Playing With PHP 5.3 by
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3Fabien Potencier
2.3K views78 slides
jpa.pdf by
jpa.pdfjpa.pdf
jpa.pdfssuser57bd3a
8 views29 slides
Patterns and OOP in PHP by
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
1.6K views30 slides
Memo java by
Memo javaMemo java
Memo javaGhazouani Mahdi
2.5K views8 slides
Chapitre 2 classe et objet by
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objetAmir Souissi
979 views12 slides

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

Patterns and OOP in PHP by julien pauli
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
julien pauli1.6K views
Chapitre 2 classe et objet by Amir Souissi
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
Amir Souissi979 views
Introduction à l’orienté objet en Python by Abdoulaye Dieng
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
Abdoulaye Dieng704 views
Javascript ne se limite pas à jquery by neuros
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
neuros762 views
Traits : de la théorie à la pratique by Frederic Hardy
Traits : de la théorie à la pratiqueTraits : de la théorie à la pratique
Traits : de la théorie à la pratique
Frederic Hardy1.1K views
fdocuments.fr_chap-03-poo-en-java-partie1.pptx by TarikElMahtouchi1
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
Quelle place pour le framework Rails dans le développement d'application web by 5pidou
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
5pidou594 views

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