PHP
Bertrand Estellon
Aix-Marseille Universit e
13 mars 2012
Bertrand Estellon (AMU)
PHP
13 mars 2012
1 / 214
Programmation Oriente Objet e
Introduction
Programmation Oriente Objet e
La programmation oriente objet de PHP 5 est similaire ` celle de Java. e a Nous allons voir comment : Dnir une classe e Crer une instance e Accder aux proprits et invoquer des mthodes e ee e Modier laccessibilit aux proprits et aux mthodes e ee e Dnir un constructeur et un destructeur e Dnir des interfaces, des classes abstraites e Utiliser lhritage e Cloner des instances
Bertrand Estellon (AMU)
PHP
13 mars 2012
122 / 214
Programmation Oriente Objet e
Classe et instance
Dnition dune classe e
Pour dnir une classe, on utilise le mot-cl class. e e <? class uneClasse {
p u b l i c $p1 ; p u b l i c $p2 = 1 2 ; p u b l i c $p3 = a r r a y ( t o t o , 1 2 ) ; // p u b l i c $p4 = s t r l e n ( t o t o ) ; interdit ! public ... } } ?>
Bertrand Estellon (AMU) PHP 13 mars 2012 123 / 214
f u n c t i o n maMethode ( $ a r g 1 , $ a r g 2 ) {
Programmation Oriente Objet e
Classe et instance
Cration dune instance e
Pour crer une instance dune classe, on utilise le mot-cl new. e e <? class uneClasse {
p u b l i c $p1 ; p u b l i c $p2 = 1 2 ; p u b l i c $p3 = a r r a y ( t o t o , 1 2 ) ; // p u b l i c $p4 = s t r l e n ( t o t o ) ; interdit ! public } $ i 1 = new m a C l a s s e ( ) ; $ i 2 = new m a C l a s s e ( ) ; ?>
Bertrand Estellon (AMU) PHP 13 mars 2012 124 / 214
f u n c t i o n maMethode ( $ a r g 1 , $ a r g 2 ) { . . . }
Programmation Oriente Objet e
Classe et instance
Acc`s aux proprits et invocation de mthodes e ee e
<? c l a s s UneClasse { p u b l i c $p ; p u b l i c f u n c t i o n maMethode ( $ a r g ) { . . . } } $ i = new U n e C l a s s e ( ) ; $i >p = 1 2 ; pas de $ dans le nom de la proprit e e e c h o $ i >p ; $ i >p = a r r a y ( 1 , 2 ) ; e c h o $ i >p [ 1 ] ; idem avec les tableaux $ i >maMethode ( t o t o ) ; avec la -> comme en C++ ?>
Bertrand Estellon (AMU) PHP 13 mars 2012 125 / 214
Programmation Oriente Objet e
Classe et instance
$this
<? c l a s s maClasse { p u b l i c $p = 0 ; p u b l i c f u n c t i o n maMethode ( ) { $ t h i s >p+=1; e c h o $ t h i s >p . \n ; } p u b l i c f u n c t i o n maMethodeBis ( ) { $ t h i s >maMethode ( ) ; } } $ i = new m a C l a s s e ( ) ; $i >maMethode ( ) ; ache 1 $ i >maMethode ( ) ; ache 2 $ i >maMethodeBis ( ) ; ache 3 ?>
Bertrand Estellon (AMU) PHP 13 mars 2012 126 / 214
Programmation Oriente Objet e
Classe et instance
Constantes proprits et mthodes statiques ee e
<? c l a s s maClasse { c o n s t c =2; p u b l i c s t a t i c $s = 4 ; p u b l i c s t a t i c f u n c t i o n maMethode ( ) { s e l f : : $ s+=s e l f : : c ; e c h o s e l f : : $ s . \n ; } } $ i 1 = new m a C l a s s e ( ) ; $ i 2 = new m a C l a s s e ( ) ; $i1 >maMethode ( ) ; ache 6 m a C l a s s e : : maMethode ( ) ; ache 8 $ i 2 >maMethode ( ) ; ache 10 e c h o m a C l a s s e : : $ s . . m a C l a s s e : : c ; ache 10 2 ?>
Bertrand Estellon (AMU) PHP 13 mars 2012 127 / 214
Programmation Oriente Objet e
Classe et instance
Constructeur et destructeur
c l a s s maClasse { p r i v a t e $nom ; function } function } } $ i 1 = new m a C l a s s e ( moi ) ; $ i 2 = new m a C l a s s e ( t o i ) ; $ i 1 = n u l l ; achage de moi est mort. achage de toi est mort
Bertrand Estellon (AMU) PHP 13 mars 2012 128 / 214
c o n s t r u c t ( $nom ) { $ t h i s >nom = $nom ;
destruct () { e c h o $ t h i s >nom . e s t mort . \ n ;
Programmation Oriente Objet e
Hritage et interface e
Interface
i n t e r f a c e monInterface1 { p u b l i c f u n c t i o n methode1 ( ) ; p u b l i c f u n c t i o n methode2 ( $ a r g ) ; } i n t e r f a c e monInterface2 { p u b l i c f u n c t i o n methode3 ( ) ; }
c l a s s maClasse implements monInterface1 , monInterface2 { p u b l i c f u n c t i o n methode1 ( ) { . . . } p u b l i c f u n c t i o n methode2 ( $ a r g ) { . . . } p u b l i c f u n c t i o n methode3 ( ) { . . . } }
Bertrand Estellon (AMU) PHP 13 mars 2012 129 / 214
Programmation Oriente Objet e
Hritage et interface e
Hritage e
c l a s s maClasse { p u b l i c $n ; c o n s t r u c t ( $n ) { $ t h i s >n = $n ; } function f u n c t i o n a f f i c h e r ( ) { e c h o $ t h i s >n . \n ; } } class maClasseHeritee extends maClasse { p u b l i c $v ; function c o n s t r u c t ( $n , $v =2) { parent : : c o n s t r u c t ( $n ) ; $ t h i s >v = $v ;
} function } }
Bertrand Estellon (AMU) PHP 13 mars 2012 130 / 214
a f f i c h e r () { e c h o $ t h i s >n . . $ t h i s >v . \n ;
Programmation Oriente Objet e
Hritage et interface e
Hritage e
$ i 1 = new m a C l a s s e ( i n s t a n c e 1 ) ; $ i 2 = new m a C l a s s e H e r i t e e ( i n s t a n c e 2 , 1 2 ) ; $ i 1 > a f f i c h e r ( ) ; ache instance1 $ i 2 > a f f i c h e r ( ) ; ache instance2 12 var var var var dump ( $ i 1 dump ( $ i 2 dump ( $ i 1 dump ( $ i 2 instanceof instanceof instanceof instanceof m a C l a s s e ) ; bool(true) m a C l a s s e ) ; bool(true) m a C l a s s e H e r i t e e ) ; bool(false) m a C l a s s e H e r i t e e ) ; bool(true)
v a r d u m p ( $1 ) ;
Bertrand Estellon (AMU)
PHP
13 mars 2012
131 / 214
Programmation Oriente Objet e
Hritage et interface e
Late Static Bindings (Rsolution statique ` la vole) e a e
c l a s s maClasse { function af fich er 1 () { s e l f : : af fiche r2 ( ) ; } s t a t i c function a ff ich er 2 () { e c h o m a C l a s s e \n ; } } c l a s s maClasseHeritee extends maClasse { s t a t i c function a ff ich er 2 () { e c h o m a C l a s s e H e r i t e e \n ; } } $ i 1 = new m a C l a s s e ( ) ; $ i 2 = new m a C l a s s e H e r i t e e ( ) ; $ i 1 > a f f i c h e r 1 ( ) ; maClasse $ i 2 > a f f i c h e r 1 ( ) ; maClasse
Bertrand Estellon (AMU) PHP 13 mars 2012 132 / 214
Programmation Oriente Objet e
Hritage et interface e
Late Static Bindings (Rsolution statique ` la vole) e a e
c l a s s maClasse { function af fich er 1 () { s t a t i c : : a ff ich er 2 ( ) ; } s t a t i c function a ff ich er 2 () { e c h o m a C l a s s e \n ; } } c l a s s maClasseHeritee extends maClasse { s t a t i c function a ff ich er 2 () { e c h o m a C l a s s e H e r i t e e \n ; } } $ i 1 = new m a C l a s s e ( ) ; $ i 2 = new m a C l a s s e H e r i t e e ( ) ; $ i 1 > a f f i c h e r 1 ( ) ; maClasse $ i 2 > a f f i c h e r 1 ( ) ; maClasseHeritee
Bertrand Estellon (AMU) PHP 13 mars 2012 133 / 214
Programmation Oriente Objet e
Hritage et interface e
Classe abstraite
abstract class maClasseAbstraite { a b s t r a c t p u b l i c f u n c t i o n getName ( ) ; public } } c l a s s maClasse extends m a C l a s s e A b s t r a i t e { p u b l i c f u n c t i o n getName ( ) { r e t u r n moi ; } } $ i = new m a C l a s s e ( ) ; $ i >a f f i c h e r N o m ( ) ; ache moi function afficherNom () { e c h o $ t h i s >getName ( ) . \n ;
Bertrand Estellon (AMU)
PHP
13 mars 2012
134 / 214
Programmation Oriente Objet e
Hritage et interface e
Visibilit e
public : utilisable par nimporte quelle partie du programme. protected : utilisable uniquement par les classes et parents hrits. e e private : utilisable uniquement par la classe qui les a dnis. e
c l a s s maClasse { p u b l i c $pub ; p ro t ect e d $pro ; private $pri ; p u b l i c f u n c t i o n methodePublique () { . . . } p r o t e c t e d f u n c t i o n methodeProtegee ( ) { . . . } p r i v a t e f u n c t i o n methodePrivee () { . . . } } class maClasseHeritee extends maClasse { public function test () { echo $ t h i s >pub ; $ t h i s >m e t h o d e P u b l i q u e ( ) ; echo $ t h i s ro ; $ t h i s >p >m e t h o d e P r o t e g e e ( ) ; echo $ t h i s >p r i ; $ t h i s >m e t h o d e P r i v e e ( ) ; interdit ! } }
Bertrand Estellon (AMU) PHP 13 mars 2012 135 / 214
Programmation Oriente Objet e
Hritage et interface e
Visibilit e
public : utilisable par nimporte quelle partie du programme. protected : utilisable uniquement par les classes et parents hrits. e e private : utilisable uniquement par la classe qui les a dnis. e
c l a s s maClasse { p u b l i c $pub ; p ro t ect e d $pro ; private $pri ; p u b l i c f u n c t i o n methodePublique () { . . . } p r o t e c t e d f u n c t i o n methodeProtegee ( ) { . . . } p r i v a t e f u n c t i o n methodePrivee () { . . . } } c l a s s m a C l a s s e 2 // qui ntend pas maClasse { e public function test () { $ i = new m a C l a s s e ( ) ; echo $i >pub ; $ i >m e t h o d e P u b l i q u e ( ) ; echo $i ro ; $i >p >m e t h o d e P r o t e g e e ( ) ; interdit ! echo $i >p r i ; $ i >m e t h o d e P r i v e e ( ) ; interdit ! } }
Bertrand Estellon (AMU) PHP 13 mars 2012 136 / 214
Programmation Oriente Objet e
Clonage
Clonage
<? c l a s s maClasse { p u b l i c $nom ; function } function } } $ i = new m a C l a s s e ( moi ) ; $c = c l o n e $ i ; echo $i >nom . \n ; e c h o $c >nom . \n ; ?> ache moi ache Clone de moi clone () { $this >nom = C l o n e de . $ t h i s >nom ; c o n s t r u c t ( $nom ) { $this >nom = $nom ;
Bertrand Estellon (AMU)
PHP
13 mars 2012
137 / 214
Programmation Oriente Objet e
Mthodes magiques e
Mthodes magiques Set et Get e
c l a s s maClasse { p r i v a t e $props ; public function s e t ( $prop , $ v a l ) { e c h o $ p r o p < $ v a l \n ; $ t h i s >p r o p s [ $ p r o p ] = $ v a l ;
} public function g e t ( $prop ) { i f ( ! i s s e t ( $ t h i s >p r o p s [ $ p r o p ] ) ) r e t u r n e r r e u r ; e l s e r e t u r n $ t h i s >p r o p s [ $ p r o p ] ;
} } $ i = new m a C l a s s e ( ) ; $ i >t o t o = 2 ; ache toto <- 2 e c h o $ i >t o t o . \n ; ache 2 e c h o $ i >a . \n ; ache erreur
Bertrand Estellon (AMU) PHP 13 mars 2012 138 / 214
Programmation Oriente Objet e
Mthodes magiques e
Mthodes magiques Isset et Unset e
c l a s s maClasse { p r i v a t e $props ; avec les fonctions public } public u n s e t ( $prop ) { function e c h o d e s t r u c t i o n de $ p r o p \n ; u n s e t ( $ t h i s >p r o p s [ $ p r o p ] ) ; set et get dnies sur le slide prcdent e e e
function i s s e t ( $prop ) { r e t u r n i s s e t ( $ t h i s >p r o p s [ $ p r o p ] ) ;
} } $ i = new m a C l a s s e ( ) ; $ i >t o t o = 2 ; ache toto <- 2 v a r d u m p ( i s s e t ( $ i >t o t o ) ) ; ache bool(true) u n s e t ( $ i >t o t o ) ; ache destruction de toto
Bertrand Estellon (AMU) PHP 13 mars 2012 139 / 214