• Aucun résultat trouvé

[PDF] Cours PHP : POO | Télécharger PDF

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Cours PHP : POO | Télécharger PDF"

Copied!
19
0
0

Texte intégral

(1)

PHP

Bertrand Estellon

Aix-Marseille Universit´e

(2)

Programmation Orient´

ee Objet

La programmation orient´

ee objet de PHP 5 est similaire `

a celle de Java.

Nous allons voir comment :

I

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

efinir un constructeur et un destructeur

I

efinir des interfaces, des classes abstraites

I

Utiliser l’h´

eritage

(3)

Programmation Orient´ee Objet Classe et instance

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 ) {

. . .

}

}

?>

(4)

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 ( ) ;

?>

(5)

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++

(6)

$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 ?>

(7)

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 ?>

(8)

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’

(9)

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 ( ) { . . . } }

(10)

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 ( ) ;

(11)

Programmation Orient´ee Objet H´eritage et interface

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 ) ;

(12)

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 ( ) ; maClasse

(13)

Programmation 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

(14)

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 ( ) ;

(15)

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 ! } }

(16)

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 ! } }

(17)

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’

(18)

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’

(19)

Programmation Orient´ee Objet M´ethodes magiques

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’

Références

Documents relatifs

Ils confirment ainsi les observations de Van Der Geest et Whyte (1989), qui ont posé que la pratique des MAC est souvent indissociable des liens sociaux que la personne

À l’inverse, une plus récente étude révèle que les juges belges préfèrent que les rapports sociaux soient davantage informatifs et qu'ils fournissent des

تاعوضوملا سرهف تاعوضوملا سرهف عوضوملا ةحفصلا ءادىلإا نافرعو ركش ثحبلا صخلم ةمدختسب٤ا تاراشلإاو زومرلا ةمئاق ةمدقملا أ ملاسلإا يف دايعلأاو

Le découpage géographique de l’espace national de circulation des transports de marchandises permet de procéder à une analyse et à une modélisation de la distribution spatiale du

Par rapport à la surtaxation du carbone de l'essence, cette taxe annuelle, fortement dissuasive, présente deux avantages: d'une part, elle incite plus fortement les

Além da bananeira, o vírus também causa doença em mais de 800 espécies de plantas, dentre as quais destacam-se o pepino, tomate, pimentão, abóbora, melão,

This research argues that designers have much to benefit from user generated content because users submit elements pertaining to all design spaces and reveal elements of

نومحر مدآ - ةعماج يجيمث رامع طاوغلأاب - رئازجلا ينورتكللإا ديربلا : [email protected]$ :صخمم ريظنتلا يف حداف صقن