PHP
Bertrand Estellon
Aix-Marseille Universit´e
Programmation Orient´
ee Objet
La programmation orient´
ee objet de PHP 5 est similaire `
a celle de Java.
Nous allons voir comment :
I
D´
efinir une classe
I
Cr´
eer une instance
I
Acc´
eder aux propri´
et´
es et invoquer des m´
ethodes
I
Modifier l’accessibilit´
e aux propri´
et´
es et aux m´
ethodes
I
D´
efinir un constructeur et un destructeur
I
D´
efinir des interfaces, des classes abstraites
I
Utiliser l’h´
eritage
Programmation Orient´ee Objet Classe et instance
D´
efinition d’une classe
Pour d´
efinir une classe, on utilise le mot-cl´
e class.
<?
c l a s s
u n e C l a s s e {
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 !
p u b l i c
f u n c t i o n maMethode ( $ a r g 1 ,
$ a r g 2 ) {
. . .
}
}
?>
Cr´
eation d’une instance
Pour cr´
eer une instance d’une classe, on utilise le mot-cl´
e new.
<?
c l a s s
u n e C l a s s e {
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 !
p u b l i c
f u n c t i o n maMethode ( $ a r g 1 ,
$ a r g 2 )
{ . . . }
}
$ i 1 = new m a C l a s s e ( ) ;
$ i 2 = new m a C l a s s e ( ) ;
?>
Programmation Orient´ee Objet Classe et instance
Acc`
es aux propri´
et´
es et invocation de m´
ethodes
<?
c l a s s
U n e C l a s s e {
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 propri´
et´
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++
$this
<? c l a s s m a C l a s s e { 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 ( ) ; affiche 1 $ i −>maMethode ( ) ; affiche 2 $ i −>maMethodeBis ( ) ; affiche 3 ?>Programmation Orient´ee Objet Classe et instance
Constantes – propri´
et´
es et m´
ethodes statiques
<? c l a s s m a C l a s s e { 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 ( ) ; $ i 1 −>maMethode ( ) ; affiche 6 m a C l a s s e : :maMethode ( ) ; affiche 8 $ i 2 −>maMethode ( ) ; affiche 10 e c h o m a C l a s s e : : $ s . ’ ’ . m a C l a s s e : : c ; affiche 10 2 ?>Constructeur et destructeur
c l a s s m a C l a s s e { p r i v a t e $nom ; f u n c t i o n c o n s t r u c t( $nom ) { $ t h i s −>nom = $nom ; } f u n c t i o n d e s t r u c t ( ) { e c h o $ t h i s −>nom . ” e s t m o r t . \ n ” ; } } $ 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 ; affichage de ’moi est mort.’ affichage de ’toi est mort’
Programmation Orient´ee Objet H´eritage et interface
Interface
i n t e r f a c e m o n I n t e r f a c e 1 { 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 m o n I n t e r f a c e 2 { p u b l i c f u n c t i o n methode3 ( ) ; } c l a s s m a C l a s s e i m p l e m e n t s m o n I n t e r f a c e 1 , m o n I n t e r f a c e 2 { 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 ( ) { . . . } }H´
eritage
c l a s s m a C l a s s e { p u b l i c $n ; f u n c t i o n c o n s t r u c t ( $n ) { $ t h i s −>n = $n ; } 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 ” ; } } c l a s s m a C l a s s e H e r i t e e e x t e n d s m a C l a s s e { p u b l i c $ v ; f u n c t i o n c o n s t r u c t ( $n , $ v =2) { p a r e n t : : c o n s t r u c t ( $n ) ; $ t h i s −>v = $ v ; } 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 . ” ” . $ t h i s −>v . ”\ n ” ; } } $ 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 ( ) ; $ i 2 −> a f f i c h e r ( ) ;Programmation Orient´ee Objet H´eritage et interface
H´
eritage
$ 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 ( ) ; affiche ’instance1’ $ i 2 −> a f f i c h e r ( ) ; affiche ’instance2 12’ v a r d u m p ( $ i 1 i n s t a n c e o f m a C l a s s e ) ; bool(true) v a r d u m p ( $ i 2 i n s t a n c e o f m a C l a s s e ) ; bool(true) v a r d u m p ( $ i 1 i n s t a n c e o f m a C l a s s e H e r i t e e ) ; bool(false) v a r d u m p ( $ i 2 i n s t a n c e o f 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 ) ;Late Static Bindings (R´
esolution statique `
a la vol´
ee)
c l a s s m a C l a s s e { f u n c t i o n a f f i c h e r 1 ( ) { s e l f : : a f f i c h e r 2 ( ) ; } s t a t i c f u n c t i o n a f f i c h e r 2 ( ) { e c h o ”m a C l a s s e \ n ” ; } } c l a s s m a C l a s s e H e r i t e e e x t e n d s m a C l a s s e { s t a t i c f u n c t i o n a f f i c h e r 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 ( ) ; maClasseProgrammation Orient´ee Objet H´eritage et interface
Late Static Bindings (R´
esolution statique `
a la vol´
ee)
c l a s s m a C l a s s e { f u n c t i o n a f f i c h e r 1 ( ) { s t a t i c : : a f f i c h e r 2 ( ) ; } s t a t i c f u n c t i o n a f f i c h e r 2 ( ) { e c h o ”m a C l a s s e \ n ” ; } } c l a s s m a C l a s s e H e r i t e e e x t e n d s m a C l a s s e { s t a t i c f u n c t i o n a f f i c h e r 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
Classe abstraite
a b s t r a c t c l a s s m a C l a s s e A b s t r a i t e { a b s t r a c t p u b l i c f u n c t i o n getName ( ) ; p u b l i c f u n c t i o n a f f i c h e r N o m ( ) { e c h o $ t h i s −>getName ( ) . ”\ n ” ; } } c l a s s m a C l a s s e e x t e n d s 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 ( ) ;Programmation Orient´ee Objet H´eritage et interface
Visibilit´
e
I
public
: utilisable par n’importe quelle partie du programme.
I
protected
: utilisable uniquement par les classes et parents h´
erit´
es.
I
private
: utilisable uniquement par la classe qui les a d´
efinis.
c l a s s m a C l a s s e { p u b l i c $pub ; p r o t e c t e d $ p r o ; p r i v a t e $ p r i ; p u b l i c f u n c t i o n m e t h o d e P u b l i q u e ( ) { . . . } p r o t e c t e d f u n c t i o n m e t h o d e P r o t e g e e ( ) { . . . } p r i v a t e f u n c t i o n m e t h o d e P r i v e e ( ) { . . . } } c l a s s m a C l a s s e H e r i t e e e x t e n d s m a C l a s s e { p u b l i c f u n c t i o n t e s t ( ) { e c h o $ t h i s −>pub ; $ t h i s −>m e t h o d e P u b l i q u e ( ) ; e c h o $ t h i s −>p r o ; $ t h i s −>m e t h o d e P r o t e g e e ( ) ; e c h o $ 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 ! } }
Visibilit´
e
I
public
: utilisable par n’importe quelle partie du programme.
I
protected
: utilisable uniquement par les classes et parents h´
erit´
es.
I
private
: utilisable uniquement par la classe qui les a d´
efinis.
c l a s s m a C l a s s e { p u b l i c $pub ; p r o t e c t e d $ p r o ; p r i v a t e $ p r i ; p u b l i c f u n c t i o n m e t h o d e P u b l i q u e ( ) { . . . } p r o t e c t e d f u n c t i o n m e t h o d e P r o t e g e e ( ) { . . . } p r i v a t e f u n c t i o n m e t h o d e P r i v e e ( ) { . . . } }
c l a s s m a C l a s s e 2 // qui n’´etend pas maClasse { p u b l i c f u n c t i o n t e s t ( ) { $ i = new m a C l a s s e ( ) ; e c h o $ i −>pub ; $ i −>m e t h o d e P u b l i q u e ( ) ; e c h o $ i −>p r o ; $ i −>m e t h o d e P r o t e g e e ( ) ; interdit ! e c h o $ i −> p r i ; $ i −>m e t h o d e P r i v e e ( ) ; interdit ! } }
Programmation Orient´ee Objet Clonage
Clonage
<? c l a s s m a C l a s s e { p u b l i c $nom ; f u n c t i o n c o n s t r u c t ( $nom ) { $ t h i s −>nom = $nom ; } f u n c t i o n c l o n e ( ) { $ t h i s −>nom = ”C l o n e de ” . $ t h i s −>nom ; } } $ i = new m a C l a s s e ( ”moi ” ) ; $ c = c l o n e $ i ;e c h o $ i −>nom . ”\ n ” ; affiche ’moi’
e c h o $c−>nom . ”\ n ” ; affiche ’Clone de moi’
M´
ethodes magiques – Set et Get
c l a s s m a C l a s s e { p r i v a t e $ p r o p s ; p u b l i c f u n c t i o n s e t ( $ p r o p , $ 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 ; } p u b l i c f u n c t i o n g e t ( $ p r o p ) { 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 ; affiche ’toto <- 2’ e c h o $ i −>t o t o . ”\ n ” ; affiche ’2’ e c h o $ i −>a . ”\ n ” ; affiche ’erreur’Programmation Orient´ee Objet M´ethodes magiques
M´
ethodes magiques – Isset et Unset
c l a s s m a C l a s s e {
p r i v a t e $ p r o p s ;
avec les fonctions set et get d´efinies sur le slide pr´ec´edent
p u b l i c f u n c t i o n i s s e t ( $ p r o p ) { r e t u r n i s s e t ( $ t h i s −>p r o p s [ $ p r o p ] ) ; } p u b l i c f u n c t i o n u n s e t ( $ p r o p ) { 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 ] ) ; } } $ i = new m a C l a s s e ( ) ; $ i −>t o t o = 2 ; affiche ’toto <- 2’ v a r d u m p ( i s s e t ( $ i −>t o t o ) ) ; affiche ’bool(true)’ u n s e t ( $ i −>t o t o ) ; affiche ’destruction de toto’