SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
Jean-Marie Renouard 
LightPath 2014©
Le logo PHP est du domaine public 
http://commons.wikimedia.org/wiki/File:PHP-logo.svg 
Ce document est licencié sous licence 
◦Attribution-NonCommercial-ShareAlike 
◦CC BY-NC-SA 
Plus de détails: 
http://creativecommons.org/licenses/by-nc-sa/3.0/fr/ LightPath 2014© - http://www.jmrenouard.fr 
2
Syntaxe de base 
Auto-chargement de classes 
Constructeurs et destructeurs 
Visibilité 
L'héritage 
L'opérateur de résolution de portée (::) 
Les données statiques 
LightPath 2014© - http://www.jmrenouard.fr 
3
Constantes de classe 
Abstraction de classes 
Interfaces 
Surcharge 
Parcours d'objets 
Masques 
Méthodes magiques LightPath 2014© - http://www.jmrenouard.fr 
4
Mot-clé "final" 
Clonage d'objets 
Comparaison d'objets 
Réflexion 
Typage objet 
Les exceptions 
Les traits 
LightPath 2014© - http://www.jmrenouard.fr 
5
LightPath 2014© - http://www.jmrenouard.fr 
6
Mot clé : class 
Exemple 
class A { 
function toto() { echo « toto de A » ; } 
} 
class B{ 
function titi(){ A::toto(); } 
} 
LightPath 2014© - http://www.jmrenouard.fr 
7
Creation d'objet de la classe 
$a = new A(); 
$b = new B(); 
Utilisation des objets 
$b->titi(); 
B::titi(); 
$a->toto(); 
A::toto(); 
LightPath 2014© - http://www.jmrenouard.fr 
8
LightPath 2014© - http://www.jmrenouard.fr 
9
Exécution automatique de code de chargement de classe 
function __autoload($class_name) { 
require_once $class_name . '.php'; 
} 
$obj = new MaClasse1(); 
$obj2 = new MaClasse2(); 
LightPath 2014© - http://www.jmrenouard.fr 
10
LightPath 2014© - http://www.jmrenouard.fr 
11
Constructeur : fonction spéciale exécutée à la création de l'objet 
1 seul constructeur possible 
Plusieurs paramètres possibles 
Destructeur : fonction spéciale éxécutée à la destruction de l'objet 
LightPath 2014© - http://www.jmrenouard.fr 
12
class A { 
function __construct() { 
print "A la construction de l'objet de type classe An"; 
} 
} 
LightPath 2014© - http://www.jmrenouard.fr 
13
class A { 
function __destruct() { 
print "A la destruction de l'objet de type classe An"; 
} 
} 
LightPath 2014© - http://www.jmrenouard.fr 
14
LightPath 2014© - http://www.jmrenouard.fr 
15
Accès “public” : accès depuis l'extérieur 
 Accès “protected” : accès depuis une classe dérivée 
 Accès “private” : accès depuis une fonction de la classe uniquement 
LightPath 2014© - http://www.jmrenouard.fr 
16
LightPath 2014© - http://www.jmrenouard.fr 
17
LightPath 2014© - http://www.jmrenouard.fr 
18
Moyen de généraliser des traitements 
Moyen de dériver des comportements spécifiques 
Mot clé : exends 
◦class deriveB extends A 
LightPath 2014© - http://www.jmrenouard.fr 
19
Moyen d'accèder au membre d'une classe 
Résolution des ambibuités de nommage 
$a n'est pas équivalent à $MaClasse::a 
self::xxx est un espace de nommage pointant sur l'objet courant 
parent:: xxx est un espace de nommage de la classe de base LightPath 2014© - http://www.jmrenouard.fr 
20
LightPath 2014© - http://www.jmrenouard.fr 
21
Les variables statiques sont des variables communes à toutes les instances de la classe 
Le code d'une fonction statique n'est pas dupliqué 
La variable statique possède des contraintes d'accès concurrentiels 
LightPath 2014© - http://www.jmrenouard.fr 
22
Variable dont la valeur est immuable 
◦const constant = 'valeur constante'; 
LightPath 2014© - http://www.jmrenouard.fr 
23
LightPath 2014© - http://www.jmrenouard.fr 
24
L'abstraction de classe consiste à déclarer des fonctions sans code. 
Seule une classe dérivée ( extends ) définissant le code des fonctions peut être instanciée. 
La démocratie : principe abstrait 
La république : incarnation concrète de la démocratie 
LightPath 2014© - http://www.jmrenouard.fr 
25
LightPath 2014© - http://www.jmrenouard.fr 
26
Un ensemble de déclaration sans code. 
Equivalent à une classe n'ayant que des fonctions publiques abstraites 
Mot clé “implements” permets à une classe de se faire passer pour l'interface 
interface Dieu { 
public function invoquerLePouvoir(); 
} 
LightPath 2014© - http://www.jmrenouard.fr 
27
LightPath 2014© - http://www.jmrenouard.fr 
28
La lecture et l'écriture peuvent être interceptées 
void __set ( string name, mixed value ) 
mixed __get ( string name ) 
bool __isset ( string name ) 
void __unset ( string name ) 
mixed __call ( string name, array arguments ) 
LightPath 2014© - http://www.jmrenouard.fr 
29
$this : variable contenant l'objet courant 
$this vu comme un tableau à clé 
Chaque objet vu comme tableau à clé 
$class = new MyClass(); 
foreach($class as $key => $value) { 
print "$key => $valuen"; 
} 
LightPath 2014© - http://www.jmrenouard.fr 
30
Modèle de conception 
◦Factory : modèle permettant de faciliter la construction d'un nouvel objet 
◦Singleton : modèle permettant de limiter le nombre d'objet crée par classe 
LightPath 2014© - http://www.jmrenouard.fr 
31
__sleep :Avant sérialisation de l'objet 
__wakeup : Après sérialisation de l'objet 
 __toString : conversion en chaîne 
 __set_state : export de la définition des objets 
 __clone : Opération en cas de clonage 
LightPath 2014© - http://www.jmrenouard.fr 
32
LightPath 2014© - http://www.jmrenouard.fr 
33
La fonction “final” est la dernière de la hiérarchie. 
La fonction ne peut pas être dérivée 
LightPath 2014© - http://www.jmrenouard.fr 
34
LightPath 2014© - http://www.jmrenouard.fr 
35
Dupliquer un objet et l'ensemble de son état 
Copie de zone mémoire 
Ce n'est pas une simple copie de référence 
Fonction spéciale : __clone 
$copie_d_objet = clone $objet; 
LightPath 2014© - http://www.jmrenouard.fr 
36
LightPath 2014© - http://www.jmrenouard.fr 
37
Pas de surcharge possible des opérateurs 
A défaut, écrire une fonction de comparaison 
Les opérateurs classiques ne comparent que l'adresse ou référence. 
L'état et le type des objets ne comptent pas dans les comparaisons par opérateur 
LightPath 2014© - http://www.jmrenouard.fr 
38
LightPath 2014© - http://www.jmrenouard.fr 
39
Capacité d'introspecter la définition d'une variable 
API permettant : 
◦Créer des instances 
◦Consulter les méthodes des classes 
◦Récupérer l'information sur la classe 
LightPath 2014© - http://www.jmrenouard.fr 
40
class Reflection : classe de base 
class ReflectionFunction : Introspection de fonction 
class ReflectionParameter: Introspection de paramètre 
class ReflectionMethod : Introspection de méthodes 
class ReflectionClass : Introspection de classe 
class ReflectionObject: Introspection d'objet 
class ReflectionProperty : Introspection de propriété 
class ReflectionExtension : Extension de l'introspection 
LightPath 2014© - http://www.jmrenouard.fr 
41
Connaitre la structure de la classe ReflexionFunction 
<?php 
Reflection::export(new ReflectionClass('ReflexionFunction')); 
?> 
LightPath 2014© - http://www.jmrenouard.fr 
42
LightPath 2014© - http://www.jmrenouard.fr 
43
Les objets sont de type objet :) 
Typage dynamique est sous jacent au modèle objet 
Plusieurs types possibles 
On peut imposer le type dans les fonctions 
◦function test_array(array $input); 
◦function test_class_A(A $a); 
LightPath 2014© - http://www.jmrenouard.fr 
44
LightPath 2014© - http://www.jmrenouard.fr 
45
Bloc à surveiller : try { ... } 
Exception à traiter catch( Exception e) {...} 
Pas de bloc finally comme en C++ ou Java 
◦Bloc Finally uniquement à partir de PHP 5.5 
Lancement d'exception : throw new Exception(« message »); 
LightPath 2014© - http://www.jmrenouard.fr 
46
Try { 
$error = 'Toujours lancer cette erreur'; 
throw new Exception($error); 
// le code suivant une exception n'est pas exécuté. 
echo 'Jamais exécuté'; 
}catch (Exception $e) { 
echo "Capture de l'exception : ", $e->getMessage(), "n"; 
} 
LightPath 2014© - http://www.jmrenouard.fr 
47
LightPath 2014© - http://www.jmrenouard.fr 
48
Bloc de code insérable dans une classe 
Evite la redondance(copier/coller) dans les objets 
Equivalent d‟un include ou require version objet 
Uniquement en PHP 5.4 
Syntaxe: 
◦trait DireBonjour { public function direBonjour() { echo „Bonjour'; } } 
LightPath 2014© - http://www.jmrenouard.fr 
49
Utilisation d‟un trait dans une classe 
Mot clé use 
Exemple: 
class MaClassePoli { use DireBonjour; 
function direAdieu() { 
echo “Adieu”; 
} } 
LightPath 2014© - http://www.jmrenouard.fr 
50
Documentation du PHP 
http://www.php.net/docs 
LightPath 2014© - http://www.jmrenouard.fr 
51
LightPath: 
◦Société de conseil et d‟ingénierie 
◦Formations, Conseil, Audit et mise en oeuvre 
◦jmrenouard@lightpath.fr 
Jean-Marie RENOUARD 
◦jmrenouard@gmail.com 
◦Twitter: @jmrenouard 
◦http://www.jmrenouard.fr 
LightPath 2014© - http://www.jmrenouard.fr 
52

Mais conteúdo relacionado

Mais procurados

PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POO
mazenovi
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
kader15
 

Mais procurados (19)

Email et PHP5
Email et PHP5Email et PHP5
Email et PHP5
 
MVC / Frameworks PHP
MVC / Frameworks PHPMVC / Frameworks PHP
MVC / Frameworks PHP
 
Les structures de données PHP5
Les structures de données PHP5Les structures de données PHP5
Les structures de données PHP5
 
Sécurité et Quaité de code PHP
Sécurité et Quaité de code PHPSécurité et Quaité de code PHP
Sécurité et Quaité de code PHP
 
Javascript et JQuery
Javascript et JQueryJavascript et JQuery
Javascript et JQuery
 
Le client FTP de PHP5
Le client FTP de PHP5Le client FTP de PHP5
Le client FTP de PHP5
 
Présentation de PHP
Présentation de PHPPrésentation de PHP
Présentation de PHP
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
 
PHP5 - POO
PHP5 - POOPHP5 - POO
PHP5 - POO
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
 
Bases de PHP - Partie 1
Bases de PHP - Partie 1Bases de PHP - Partie 1
Bases de PHP - Partie 1
 
Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sql
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Cours php
Cours phpCours php
Cours php
 
Formation PHP
Formation PHPFormation PHP
Formation PHP
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015
 

Destaque

Destaque (7)

Manuel de sécurisation d'un serveur Linux
Manuel de sécurisation d'un serveur LinuxManuel de sécurisation d'un serveur Linux
Manuel de sécurisation d'un serveur Linux
 
Ssh cookbook
Ssh cookbookSsh cookbook
Ssh cookbook
 
Structure de données en PHP
Structure de données en PHPStructure de données en PHP
Structure de données en PHP
 
PHP 5 pour les développeurs Java
PHP 5 pour les développeurs JavaPHP 5 pour les développeurs Java
PHP 5 pour les développeurs Java
 
Présentation de Node.js
Présentation de Node.jsPrésentation de Node.js
Présentation de Node.js
 
alphorm.com - Formation Développez des applications Web avec ASP.NET MVC 4(70...
alphorm.com - Formation Développez des applications Web avec ASP.NET MVC 4(70...alphorm.com - Formation Développez des applications Web avec ASP.NET MVC 4(70...
alphorm.com - Formation Développez des applications Web avec ASP.NET MVC 4(70...
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 

Semelhante a PHP 5 et la programmation objet

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
Frederic Hardy
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
Gregory Renard
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
julien pauli
 
Introspection reflection
Introspection reflectionIntrospection reflection
Introspection reflection
Eric Toguem
 
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
Jean-Pierre Vincent
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
Amel Morchdi
 

Semelhante a PHP 5 et la programmation objet (20)

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
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
 
Introspection reflection
Introspection reflectionIntrospection reflection
Introspection reflection
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web services
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?
 
test doc
test doctest doc
test doc
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdf
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afup
 
Comment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerComment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguer
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
Annotations pour les Geeks
Annotations pour les GeeksAnnotations pour les Geeks
Annotations pour les Geeks
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 
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
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVA
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
 
Programmation Android - 03 - IHM bases
Programmation Android - 03 - IHM basesProgrammation Android - 03 - IHM bases
Programmation Android - 03 - IHM bases
 

Último (6)

mémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoiremémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoire
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigés
 
le probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptxle probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptx
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfpdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
 

PHP 5 et la programmation objet

  • 2. Le logo PHP est du domaine public http://commons.wikimedia.org/wiki/File:PHP-logo.svg Ce document est licencié sous licence ◦Attribution-NonCommercial-ShareAlike ◦CC BY-NC-SA Plus de détails: http://creativecommons.org/licenses/by-nc-sa/3.0/fr/ LightPath 2014© - http://www.jmrenouard.fr 2
  • 3. Syntaxe de base Auto-chargement de classes Constructeurs et destructeurs Visibilité L'héritage L'opérateur de résolution de portée (::) Les données statiques LightPath 2014© - http://www.jmrenouard.fr 3
  • 4. Constantes de classe Abstraction de classes Interfaces Surcharge Parcours d'objets Masques Méthodes magiques LightPath 2014© - http://www.jmrenouard.fr 4
  • 5. Mot-clé "final" Clonage d'objets Comparaison d'objets Réflexion Typage objet Les exceptions Les traits LightPath 2014© - http://www.jmrenouard.fr 5
  • 6. LightPath 2014© - http://www.jmrenouard.fr 6
  • 7. Mot clé : class Exemple class A { function toto() { echo « toto de A » ; } } class B{ function titi(){ A::toto(); } } LightPath 2014© - http://www.jmrenouard.fr 7
  • 8. Creation d'objet de la classe $a = new A(); $b = new B(); Utilisation des objets $b->titi(); B::titi(); $a->toto(); A::toto(); LightPath 2014© - http://www.jmrenouard.fr 8
  • 9. LightPath 2014© - http://www.jmrenouard.fr 9
  • 10. Exécution automatique de code de chargement de classe function __autoload($class_name) { require_once $class_name . '.php'; } $obj = new MaClasse1(); $obj2 = new MaClasse2(); LightPath 2014© - http://www.jmrenouard.fr 10
  • 11. LightPath 2014© - http://www.jmrenouard.fr 11
  • 12. Constructeur : fonction spéciale exécutée à la création de l'objet 1 seul constructeur possible Plusieurs paramètres possibles Destructeur : fonction spéciale éxécutée à la destruction de l'objet LightPath 2014© - http://www.jmrenouard.fr 12
  • 13. class A { function __construct() { print "A la construction de l'objet de type classe An"; } } LightPath 2014© - http://www.jmrenouard.fr 13
  • 14. class A { function __destruct() { print "A la destruction de l'objet de type classe An"; } } LightPath 2014© - http://www.jmrenouard.fr 14
  • 15. LightPath 2014© - http://www.jmrenouard.fr 15
  • 16. Accès “public” : accès depuis l'extérieur  Accès “protected” : accès depuis une classe dérivée  Accès “private” : accès depuis une fonction de la classe uniquement LightPath 2014© - http://www.jmrenouard.fr 16
  • 17. LightPath 2014© - http://www.jmrenouard.fr 17
  • 18. LightPath 2014© - http://www.jmrenouard.fr 18
  • 19. Moyen de généraliser des traitements Moyen de dériver des comportements spécifiques Mot clé : exends ◦class deriveB extends A LightPath 2014© - http://www.jmrenouard.fr 19
  • 20. Moyen d'accèder au membre d'une classe Résolution des ambibuités de nommage $a n'est pas équivalent à $MaClasse::a self::xxx est un espace de nommage pointant sur l'objet courant parent:: xxx est un espace de nommage de la classe de base LightPath 2014© - http://www.jmrenouard.fr 20
  • 21. LightPath 2014© - http://www.jmrenouard.fr 21
  • 22. Les variables statiques sont des variables communes à toutes les instances de la classe Le code d'une fonction statique n'est pas dupliqué La variable statique possède des contraintes d'accès concurrentiels LightPath 2014© - http://www.jmrenouard.fr 22
  • 23. Variable dont la valeur est immuable ◦const constant = 'valeur constante'; LightPath 2014© - http://www.jmrenouard.fr 23
  • 24. LightPath 2014© - http://www.jmrenouard.fr 24
  • 25. L'abstraction de classe consiste à déclarer des fonctions sans code. Seule une classe dérivée ( extends ) définissant le code des fonctions peut être instanciée. La démocratie : principe abstrait La république : incarnation concrète de la démocratie LightPath 2014© - http://www.jmrenouard.fr 25
  • 26. LightPath 2014© - http://www.jmrenouard.fr 26
  • 27. Un ensemble de déclaration sans code. Equivalent à une classe n'ayant que des fonctions publiques abstraites Mot clé “implements” permets à une classe de se faire passer pour l'interface interface Dieu { public function invoquerLePouvoir(); } LightPath 2014© - http://www.jmrenouard.fr 27
  • 28. LightPath 2014© - http://www.jmrenouard.fr 28
  • 29. La lecture et l'écriture peuvent être interceptées void __set ( string name, mixed value ) mixed __get ( string name ) bool __isset ( string name ) void __unset ( string name ) mixed __call ( string name, array arguments ) LightPath 2014© - http://www.jmrenouard.fr 29
  • 30. $this : variable contenant l'objet courant $this vu comme un tableau à clé Chaque objet vu comme tableau à clé $class = new MyClass(); foreach($class as $key => $value) { print "$key => $valuen"; } LightPath 2014© - http://www.jmrenouard.fr 30
  • 31. Modèle de conception ◦Factory : modèle permettant de faciliter la construction d'un nouvel objet ◦Singleton : modèle permettant de limiter le nombre d'objet crée par classe LightPath 2014© - http://www.jmrenouard.fr 31
  • 32. __sleep :Avant sérialisation de l'objet __wakeup : Après sérialisation de l'objet  __toString : conversion en chaîne  __set_state : export de la définition des objets  __clone : Opération en cas de clonage LightPath 2014© - http://www.jmrenouard.fr 32
  • 33. LightPath 2014© - http://www.jmrenouard.fr 33
  • 34. La fonction “final” est la dernière de la hiérarchie. La fonction ne peut pas être dérivée LightPath 2014© - http://www.jmrenouard.fr 34
  • 35. LightPath 2014© - http://www.jmrenouard.fr 35
  • 36. Dupliquer un objet et l'ensemble de son état Copie de zone mémoire Ce n'est pas une simple copie de référence Fonction spéciale : __clone $copie_d_objet = clone $objet; LightPath 2014© - http://www.jmrenouard.fr 36
  • 37. LightPath 2014© - http://www.jmrenouard.fr 37
  • 38. Pas de surcharge possible des opérateurs A défaut, écrire une fonction de comparaison Les opérateurs classiques ne comparent que l'adresse ou référence. L'état et le type des objets ne comptent pas dans les comparaisons par opérateur LightPath 2014© - http://www.jmrenouard.fr 38
  • 39. LightPath 2014© - http://www.jmrenouard.fr 39
  • 40. Capacité d'introspecter la définition d'une variable API permettant : ◦Créer des instances ◦Consulter les méthodes des classes ◦Récupérer l'information sur la classe LightPath 2014© - http://www.jmrenouard.fr 40
  • 41. class Reflection : classe de base class ReflectionFunction : Introspection de fonction class ReflectionParameter: Introspection de paramètre class ReflectionMethod : Introspection de méthodes class ReflectionClass : Introspection de classe class ReflectionObject: Introspection d'objet class ReflectionProperty : Introspection de propriété class ReflectionExtension : Extension de l'introspection LightPath 2014© - http://www.jmrenouard.fr 41
  • 42. Connaitre la structure de la classe ReflexionFunction <?php Reflection::export(new ReflectionClass('ReflexionFunction')); ?> LightPath 2014© - http://www.jmrenouard.fr 42
  • 43. LightPath 2014© - http://www.jmrenouard.fr 43
  • 44. Les objets sont de type objet :) Typage dynamique est sous jacent au modèle objet Plusieurs types possibles On peut imposer le type dans les fonctions ◦function test_array(array $input); ◦function test_class_A(A $a); LightPath 2014© - http://www.jmrenouard.fr 44
  • 45. LightPath 2014© - http://www.jmrenouard.fr 45
  • 46. Bloc à surveiller : try { ... } Exception à traiter catch( Exception e) {...} Pas de bloc finally comme en C++ ou Java ◦Bloc Finally uniquement à partir de PHP 5.5 Lancement d'exception : throw new Exception(« message »); LightPath 2014© - http://www.jmrenouard.fr 46
  • 47. Try { $error = 'Toujours lancer cette erreur'; throw new Exception($error); // le code suivant une exception n'est pas exécuté. echo 'Jamais exécuté'; }catch (Exception $e) { echo "Capture de l'exception : ", $e->getMessage(), "n"; } LightPath 2014© - http://www.jmrenouard.fr 47
  • 48. LightPath 2014© - http://www.jmrenouard.fr 48
  • 49. Bloc de code insérable dans une classe Evite la redondance(copier/coller) dans les objets Equivalent d‟un include ou require version objet Uniquement en PHP 5.4 Syntaxe: ◦trait DireBonjour { public function direBonjour() { echo „Bonjour'; } } LightPath 2014© - http://www.jmrenouard.fr 49
  • 50. Utilisation d‟un trait dans une classe Mot clé use Exemple: class MaClassePoli { use DireBonjour; function direAdieu() { echo “Adieu”; } } LightPath 2014© - http://www.jmrenouard.fr 50
  • 51. Documentation du PHP http://www.php.net/docs LightPath 2014© - http://www.jmrenouard.fr 51
  • 52. LightPath: ◦Société de conseil et d‟ingénierie ◦Formations, Conseil, Audit et mise en oeuvre ◦jmrenouard@lightpath.fr Jean-Marie RENOUARD ◦jmrenouard@gmail.com ◦Twitter: @jmrenouard ◦http://www.jmrenouard.fr LightPath 2014© - http://www.jmrenouard.fr 52