Vous êtes sur la page 1sur 33

PHP et l’Orienté Objet

M. BOUMEDIENE

Institut National des Télécommunications et des Technologies


de l’Information et de la Communication
e-mail: mboumediene[at]inttic.dz

1/20 Mohammed Boumediene - INTTIC Technologies web 2


Plan

1 Principe de l’orienté objets

2 Classes

3 Interfaces

2/20 Mohammed Boumediene - INTTIC Technologies web 2


Principe de l’orienté objets

Plan

1 Principe de l’orienté objets

2 Classes

3 Interfaces

3/20 Mohammed Boumediene - INTTIC Technologies web 2


Principe de l’orienté objets

Paradigme orienté objets


La programmation procédurale se focalise sur l’écriture des procédures (ou
fonctions) qui exécutes des actions sur les données.
Les données et procédures sont traitées indépendamment les unes des autres sans
tenir compte des relations étroites qui les unissent.
Cette séparation est-elle utile ?

4/20 Mohammed Boumediene - INTTIC Technologies web 2


Principe de l’orienté objets

Paradigme orienté objets


La programmation procédurale se focalise sur l’écriture des procédures (ou
fonctions) qui exécutes des actions sur les données.
Les données et procédures sont traitées indépendamment les unes des autres sans
tenir compte des relations étroites qui les unissent.
Cette séparation est-elle utile ?
Le paradigme orienté objet est né pour répondre à cette question.
Il est basé sur la connaissance d’une seule catégorie d’entités informatiques : les
objets.
L’objet regroupe à la fois des données et des fonctions.
Ce qui représente une meilleure intégration des données et des traitements.

4/20 Mohammed Boumediene - INTTIC Technologies web 2


Principe de l’orienté objets

Paradigme orienté objets


La programmation procédurale se focalise sur l’écriture des procédures (ou
fonctions) qui exécutes des actions sur les données.
Les données et procédures sont traitées indépendamment les unes des autres sans
tenir compte des relations étroites qui les unissent.
Cette séparation est-elle utile ?
Le paradigme orienté objet est né pour répondre à cette question.
Il est basé sur la connaissance d’une seule catégorie d’entités informatiques : les
objets.
L’objet regroupe à la fois des données et des fonctions.
Ce qui représente une meilleure intégration des données et des traitements.
L’objet est caractérisé par :
Son identité qui permet de le distinguer des autres objets.
Ses attributs, Il s’agit des données caractérisant l’objet. Ce sont des
variables internes stockant des informations d’état de l’objet.
Ses méthodes, ses traitements, qu’il sait réaliser et qu’il propose aux
autres objets.
4/20 Mohammed Boumediene - INTTIC Technologies web 2
Principe de l’orienté objets

Encapsulation, classes, objets, et instances

L’encapsulation des données fait que les données (attributs) d’un objet ne sont
accessibles que par l’intermédiaire des méthodes qui constituent une interface non
basée sur les structures de données.

5/20 Mohammed Boumediene - INTTIC Technologies web 2


Principe de l’orienté objets

Encapsulation, classes, objets, et instances

L’encapsulation des données fait que les données (attributs) d’un objet ne sont
accessibles que par l’intermédiaire des méthodes qui constituent une interface non
basée sur les structures de données.
Le concepteur de la classe peut modifier et optimiser ses structures de données.
Dès lors qu’il ne modifie pas l’interface, cela n’a aucune incidence sur les
programmes utilisateurs.

5/20 Mohammed Boumediene - INTTIC Technologies web 2


Principe de l’orienté objets

Encapsulation, classes, objets, et instances

L’encapsulation des données fait que les données (attributs) d’un objet ne sont
accessibles que par l’intermédiaire des méthodes qui constituent une interface non
basée sur les structures de données.
Le concepteur de la classe peut modifier et optimiser ses structures de données.
Dès lors qu’il ne modifie pas l’interface, cela n’a aucune incidence sur les
programmes utilisateurs.
Il y a trois modes d’accès aux attributs d’un objet :
public : il s’agit du niveau le plus bas de protection où les attributs sont
accessibles directement par l’objet lui-même ou par d’autres objets.
private : est le niveau le plus fort de protection, les attributs de l’objet
sont accessibles uniquement par les méthodes de l’objet.
protected : est un niveau de protection lié à la notion d’héritage.

5/20 Mohammed Boumediene - INTTIC Technologies web 2


Principe de l’orienté objets

Encapsulation, classes, objets, et instances

L’encapsulation des données fait que les données (attributs) d’un objet ne sont
accessibles que par l’intermédiaire des méthodes qui constituent une interface non
basée sur les structures de données.
Le concepteur de la classe peut modifier et optimiser ses structures de données.
Dès lors qu’il ne modifie pas l’interface, cela n’a aucune incidence sur les
programmes utilisateurs.
Il y a trois modes d’accès aux attributs d’un objet :
public : il s’agit du niveau le plus bas de protection où les attributs sont
accessibles directement par l’objet lui-même ou par d’autres objets.
private : est le niveau le plus fort de protection, les attributs de l’objet
sont accessibles uniquement par les méthodes de l’objet.
protected : est un niveau de protection lié à la notion d’héritage.
La classe est un modèle qui s’apparente à la déclaration d’un nouveau type qui
encapsule données et méthodes (traitements).
Une instance d’une classe est un objet appartenant à cette dernière.

5/20 Mohammed Boumediene - INTTIC Technologies web 2


Principe de l’orienté objets

Héritage et polymorphisme

L’héritage est une notion qui permet de définir une nouvelle classe en héritant les
attributs et les méthodes de classes existantes.
Une classe B qui hérite d’une classe A hérite des attributs et des méthodes de la
classe A sans avoir à les redéfinir.
B est une sous-classe de A, ou encore A est la super-classe de B ou la classe de
base.
On dit encore que la classe B est une classe dérivée de la classe A, ou que la classe
B étend la classe A.
En langage PHP, une classe ne peut avoir qu’une seule super-classe, il n’y a pas
d’héritage multiple. Par contre, elle peut avoir plusieurs sous-classes.

6/20 Mohammed Boumediene - INTTIC Technologies web 2


Principe de l’orienté objets

Héritage et polymorphisme

L’héritage est une notion qui permet de définir une nouvelle classe en héritant les
attributs et les méthodes de classes existantes.
Une classe B qui hérite d’une classe A hérite des attributs et des méthodes de la
classe A sans avoir à les redéfinir.
B est une sous-classe de A, ou encore A est la super-classe de B ou la classe de
base.
On dit encore que la classe B est une classe dérivée de la classe A, ou que la classe
B étend la classe A.
En langage PHP, une classe ne peut avoir qu’une seule super-classe, il n’y a pas
d’héritage multiple. Par contre, elle peut avoir plusieurs sous-classes.
La notion d’héritage conduit à la notion de polymorphisme faisant qu’une même
instruction peut en fait appeler lors de l’exécution des fonctions différentes de
différents objets mais ayant le même nom.
Le polymorphisme découle de la notion de redéfinition de méthodes entre une
super-classe et une sous-classe.

6/20 Mohammed Boumediene - INTTIC Technologies web 2


Classes

Plan

1 Principe de l’orienté objets

2 Classes

3 Interfaces

7/20 Mohammed Boumediene - INTTIC Technologies web 2


Classes

Déclaration de classe
La déclaration d’une classe doit contenir (dans l’ordre) :
Modificateur d’accès ou de visibilité (optionnel).
Mot-clé class suivie du nom de la classe (obligatoire).
Mot-clé extends suivie du nom de la superclasse (optionnel)
Mot-clé implements suivie d’une liste de noms d’interfaces (optionnel)
Corps de déclaration entouré par { et }
m o d i f i c a t e u r c l a s s nomClasse [ e x t e n d s c l a s s e M e r e ] [ implements
,→ i n t e r f a c e ] {
// I n s é r e r i c i l e s a t t r i b u t s e t l e s mé t h o d e s
}

8/20 Mohammed Boumediene - INTTIC Technologies web 2


Classes

Déclaration de classe
La déclaration d’une classe doit contenir (dans l’ordre) :
Modificateur d’accès ou de visibilité (optionnel).
Mot-clé class suivie du nom de la classe (obligatoire).
Mot-clé extends suivie du nom de la superclasse (optionnel)
Mot-clé implements suivie d’une liste de noms d’interfaces (optionnel)
Corps de déclaration entouré par { et }
m o d i f i c a t e u r c l a s s nomClasse [ e x t e n d s c l a s s e M e r e ] [ implements
,→ i n t e r f a c e ] {
// I n s é r e r i c i l e s a t t r i b u t s e t l e s mé t h o d e s
}

Un modificateur peut prendre l’une des valeurs suivantes :


final : la classe ne peut pas être modifiée, sa redéfinition grâce à l’héritage est
interdite. Les classes déclarées final ne peuvent donc pas avoir de classes filles.
abstract : la classe contient une ou des méthodes abstraites, qui n’ont pas de
définition explicite.

8/20 Mohammed Boumediene - INTTIC Technologies web 2


Classes

Exemple d’une classe finale

f i n a l c l a s s MotherClass {
public function test () {
echo " M o t h e r C l a s s : : t e s t ( ) a p p e l é e \n " ;
}

// I c i , peu i m p o r t e s i v o u s s p é c i f i e z l a f o n c t i o n en
,→ f i n a l e ou p a s
f i n a l p u b l i c f u n c t i o n moreTesting () {
echo " M o t h e r C l a s s : : m o r e T e s t i n g ( ) a p p e l é e \n " ;
}
}

c l a s s C h i l d C l a s s extends MotherClass {

}
// Ré s u l t a t : F a t a l e r r o r : C l a s s C h i l d C l a s s may n o t i n h e r i t
,→ from f i n a l c l a s s ( B a s e C l a s s )

Il est impossible de définir classe ChildClass à partir d’une classe finale MtherClass

9/20 Mohammed Boumediene - INTTIC Technologies web 2


Classes

Exemple d’une classe abstraite


abstract class AbstractClass {
// l e m o d i f i c a t e u r a b s t r a c t F o r c e l e s c l a s s e s f i l l e s à d é f i n i r c e t t e mé t h o d e
abstract function getValue () ;
abstract function prefixValue ( $prefix ) ;
// mé t h o d e commune
public function printOut () {
p r i n t $ t h i s −>g e t V a l u e ( ) . "\ n " ;
}
}
c l a s s ConcreteClass1 extends AbstractClass {
// C o n c r e t e C l a s s 1 d o i t d é f i n i r l a mé t h o d e g e t V a l u e ( )
public function getValue () {
return " ConcreteClass1 ";
}
// C o n c r e t e C l a s s 1 d o i t d é f i n i r l a mé t h o d e p r e f i x V a l u e ( )
public function prefixValue ( $prefix ) {
return " $ p r e f i x "."_". getValue () ;
}
}

// $ c l a s s 0 = new A b s t r a c t C l a s s ; <−−− E r r o r
$ c l a s s 1 = new C o n c r e t e C l a s s 1 ;
$ c l a s s 1 −>p r i n t O u t ( ) ;
echo $ c l a s s 1 −>p r e f i x V a l u e ( ' T e s t ' ) . " \ n " ;

Une classe déclarée abstract ne peut pas être instanciée : il faut définir une classe qui
hérite de cette classe et qui implémente les méthodes nécessaires pour ne plus être
abstraite

10/20 Mohammed Boumediene - INTTIC Technologies web 2


Classes

Déclaration des attributs


Les attributs sont les données d’une classe et leur déclaration doit contenir :
Modificateur d’accès ou de visibilité,
Nom de l’attribut.

11/20 Mohammed Boumediene - INTTIC Technologies web 2


Classes

Déclaration des attributs


Les attributs sont les données d’une classe et leur déclaration doit contenir :
Modificateur d’accès ou de visibilité,
Nom de l’attribut.
Un attribut d’instance nécessite simplement une déclaration de la variable dans le
corps de la classe
c l a s s MyClass {
public $value1 ;
private $value2 ;
protected $value3 ;
}
$myObject = new MyClass ;
$myObject−>v a l u e 1 = " I l i k e PHP " ;
$myObject−>v a l u e 2 = " 1 5 0 " ; // <−− E r r o r v a l u e 2 i s p r i v a t e
$myObject−>v a l u e 3 = t r u e ; // <−− E r r o r v a l u e 2 i s p r o t e c t e d

11/20 Mohammed Boumediene - INTTIC Technologies web 2


Classes

Déclaration des attributs


Les attributs sont les données d’une classe et leur déclaration doit contenir :
Modificateur d’accès ou de visibilité,
Nom de l’attribut.
Un attribut d’instance nécessite simplement une déclaration de la variable dans le
corps de la classe
c l a s s MyClass {
public $value1 ;
private $value2 ;
protected $value3 ;
}
$myObject = new MyClass ;
$myObject−>v a l u e 1 = " I l i k e PHP " ;
$myObject−>v a l u e 2 = " 1 5 0 " ; // <−− E r r o r v a l u e 2 i s p r i v a t e
$myObject−>v a l u e 3 = t r u e ; // <−− E r r o r v a l u e 2 i s p r o t e c t e d

Un attribut de classe est défini avec le mot clé static.


Les attributs de classe peuvent être manipulés sans la création d’un objet.
class Bicycle {
p u b l i c s t a t i c $numBicycle = 0;
}
++B i c y c l e : : $ n u m B i c y c l e ; // c l a s s N a m e : : a t t r i b u t N a m e
echo B i c y c l e : : $ n u m B i c y c l e ; // <−− 1

11/20 Mohammed Boumediene - INTTIC Technologies web 2


Classes

Déclaration des constantes


Les constantes sont définies avec le mot clé const, leur valeur ne peut pas être
modifiée.
Il est possible d’accéder aux constantes directement via la classe et cela sans
instancier un objet.
Il est aussi possible d’accéder aux constante à l’aide de méthodes invoquées par un
objet de la classe.

class Bicycle {
c o n s t CODE = "BCYC " ;

p u b l i c f u n c t i o n getCode ( ) {
r e t u r n s e l f : : CODE ;
}
}

$ m y B i c y c l e = new B i c y c l e ;
// a c c e s s t o CODE by t h e f u n c t i o n g e t C o d e ( )
echo $ m y B i c y c l e −>g e t C o d e ( ) ," < br >";
// a c c e s s t o CODE by t h e c l a s s B i c y c l e
echo B i c y c l e : : CODE ;

12/20 Mohammed Boumediene - INTTIC Technologies web 2


Classes

Déclaration des méthodes


Les méthodes sont des fonctions qui implémentent les traitements de la classe.
La déclaration d’une méthode doit contenir :
Modificateur d’accès (public, private, protected, abstract),
Le mot clé function,
Nom de la fonctions,
Les paramètres de la fonction (optionnels),
Corps de déclaration entouré par { et }.
m o d i f i c a t e u r f u n c t i o n n o m F o n c t i o n ( param è t r e s . . . ) {
// I n s é r e r i c i l e c o r p s de l a mé t h o d e
}

13/20 Mohammed Boumediene - INTTIC Technologies web 2


Classes

Déclaration des méthodes


Les méthodes sont des fonctions qui implémentent les traitements de la classe.
La déclaration d’une méthode doit contenir :
Modificateur d’accès (public, private, protected, abstract),
Le mot clé function,
Nom de la fonctions,
Les paramètres de la fonction (optionnels),
Corps de déclaration entouré par { et }.
m o d i f i c a t e u r f u n c t i o n n o m F o n c t i o n ( param è t r e s . . . ) {
// I n s é r e r i c i l e c o r p s de l a mé t h o d e
}

Une méthode peut être déclarée static et dans ce cas elle sera invoquée/appelée
sans instancier un objet de sa classe.
c l a s s Calendar {
p u b l i c s t a t i c f u n c t i o n getDate () {
r e t u r n d a t e ( " Y−m−d " ) ;
}
}

echo C a l e n d a r : : g e t D a t e ( ) ;
13/20 Mohammed Boumediene - INTTIC Technologies web 2
Classes

La notion de constructeur
Un objet est une instance, un exemplaire construit dynamiquement sur le modèle
que décrit la classe.
L’instanciation de l’objet s’effectue via une méthode particulière nommée
constructeur permettant d’initialiser ses attributs.
Le constructeur suit la définition des autres méthodes excepté que son nom doit
obligatoirement être __construct
Le constructeur est systématiquement invoqué lors de l’instanciation (création)
d’un objet (new).

c l a s s User {
p u b l i c $name ;
f u n c t i o n _ _ c o n s t r u c t ( $name ) {
$ t h i s −>name = $name ;
}
}

14/20 Mohammed Boumediene - INTTIC Technologies web 2


Classes

La notion de constructeur
Un objet est une instance, un exemplaire construit dynamiquement sur le modèle
que décrit la classe.
L’instanciation de l’objet s’effectue via une méthode particulière nommée
constructeur permettant d’initialiser ses attributs.
Le constructeur suit la définition des autres méthodes excepté que son nom doit
obligatoirement être __construct
Le constructeur est systématiquement invoqué lors de l’instanciation (création)
d’un objet (new).

c l a s s User {
p u b l i c $name ;
f u n c t i o n _ _ c o n s t r u c t ( $name ) {
$ t h i s −>name = $name ;
}
}

La définition d’un constructeur est facultative. S’il n’est pas défini, PHP appelle
un constructeur par défaut vide créé automatiquement.

14/20 Mohammed Boumediene - INTTIC Technologies web 2


Classes

La notion de constructeur (suite)


Les constructeurs des classes mères ne sont pas appelés implicitement si la classe
fille définit un constructeur. Si vous voulez utiliser un constructeur mère, il sera
nécessaire de faire appel à parent::__construct() depuis le constructeur de la
classe fille.

c l a s s User {
p u b l i c $name ;
f u n c t i o n _ _ c o n s t r u c t ( $name ) {
$ t h i s −>name = $name ;
}
}

c l a s s Admin e x t e n d s U s e r {
public $role ;
f u n c t i o n _ _ c o n s t r u c t ( $name ) {
p a r e n t : : _ _ c o n s t r u c t ( $name ) ;
$ t h i s −>r o l e = " admin " ;
}
}

$ u s e r = new Admin ( " Ahmed " ) ;


echo $ u s e r −>r o l e . " : " . $ u s e r −>name ," < br >"; // Admin : Ahmed
15/20 Mohammed Boumediene - INTTIC Technologies web 2
Classes

La notion de destructeur
Le destructeur est appelé dès qu’il n’y a plus de référence sur un objet donné.
Dans le cas où l’exécution du script est stoppée par une fonction exit(), le
destructeur sera aussi appelé.
Le destructeur est une méthode dont le nom est __destruct.

<?php
c l a s s User {
p u b l i c $name ;
f u n c t i o n _ _ c o n s t r u c t ( $name ) {
$ t h i s −>name = $name ;
}

f u n c t i o n __destruct () {
$ t h i s −>name = n u l l ;
echo " d e s t r o y i n g t h e o b j e c t U s e r " ;
}
}

$ u s e r = new U s e r ( " Ahmed " ) ;


// a t t h i s p o i n t PHP p r i n t s : " d e s t r o y i n g t h e o b j e c t U s e r "
?>

16/20 Mohammed Boumediene - INTTIC Technologies web 2


Interfaces

Plan

1 Principe de l’orienté objets

2 Classes

3 Interfaces

17/20 Mohammed Boumediene - INTTIC Technologies web 2


Interfaces

Déclaration d’interface
Lors d’un développement multi-équipes, les programmeurs des différentes équipes
doivent se mettre d’accord sur un contrat décrivant comment leurs programmes
interagissent.
Par conséquent, chaque équipe sera capable d’écrire son code sans connaître les
détails des codes des autres équipes.
⇒ cela est possible par la définition d’interfaces.

18/20 Mohammed Boumediene - INTTIC Technologies web 2


Interfaces

Déclaration d’interface
Lors d’un développement multi-équipes, les programmeurs des différentes équipes
doivent se mettre d’accord sur un contrat décrivant comment leurs programmes
interagissent.
Par conséquent, chaque équipe sera capable d’écrire son code sans connaître les
détails des codes des autres équipes.
⇒ cela est possible par la définition d’interfaces.
Une interface définit les entêtes d’un ensemble de méthodes, ainsi que des
constantes.
Cette définition permet d’imposer un contenu commun à des classes en dehors
d’une relation d’héritage.
la définition d’une interface est similaire à la définition d’une classe sauf qu’il faut
utiliser le mot-clé interface à la place de class.
Une interface ne doit jamais définir le corps de ses méthodes.

i n t e r f a c e MyInterface {
p u b l i c f u n c t i o n method1 ( $name ) ;
p u b l i c f u n c t i o n method2 ( ) ;
}

18/20 Mohammed Boumediene - INTTIC Technologies web 2


Interfaces

Implémentation d’interface
Une interface impose un comportement particulier aux classes et pour cela elle doit
être implémentée par ces dernières.

19/20 Mohammed Boumediene - INTTIC Technologies web 2


Interfaces

Implémentation d’interface
Une interface impose un comportement particulier aux classes et pour cela elle doit
être implémentée par ces dernières.
Une classe peut implémenter une ou plusieurs interfaces en utilisant le mot-clé
implements.
i n t e r f a c e MyInterface {
p u b l i c f u n c t i o n method1 ( $name ) ;
p u b l i c f u n c t i o n method2 ( ) ;
}

c l a s s MyClass i m p l e m e n t s M y I n t e r f a c e {
p u b l i c $name ;
p u b l i c f u n c t i o n method1 ( $name ) {
$ t h i s −>name = $name ;
}
p u b l i c f u n c t i o n method2 ( ) {
echo $ t h i s −>name ;
}
}

$myObject = new MyClass ;


$myObject−>method1 ( " Ahmed " ) ;
$myObject−>method2 ( ) ; // p r i n t s Ahmed
19/20 Mohammed Boumediene - INTTIC Technologies web 2
Interfaces

Merci pour votre attention! Des Questions?

20/20 Mohammed Boumediene - INTTIC Technologies web 2

Vous aimerez peut-être aussi