Vous êtes sur la page 1sur 19

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