Académique Documents
Professionnel Documents
Culture Documents
Cour de PHP
Programmation Orientée Objet
02
03
04
#1 POO
Qu’est ce que POO ?
Si on compare avec le monde réel, les objets sont partout autour de nous.
L'objet "voiture" a des caractéristiques (ou propriétés) tel que: couleur, puissance du
Moteur, vitesse, source d'énergie. En POO, on les appelle des attributs.
• C'est elle qui contient la définition des objets qui vont être créés après.
La convention veut la 1ere lettre du nom commence par une lettre majuscule
Instancer une classe
• La classe est le moule qui sert à fabriquer les objets.
• Le nombre d'objets que l'on peut créer à l'aide d'une classe est illimité.
• En fait, ce qui est important dans une classe ce sont les attributs.
Les méthodes ne font qu'agir sur ceux ci.
• Elle sert généralement à initialiser les attributs et fournir à l'objet créé tout
ce dont il a besoin pour fonctionner.
Cette opération d'initialisation est connue sous le nom d'hydratation.
$this est une pseudo-variable qui représente l'objet en cours. Autrement dit, au sein
de l'objet $mercedes la pseudo-variable $this vaut $mercedes, par conséquent:
Constructeur(3/)
Autrement dit, le destructeur est appelé quand il n'y a plus aucun appel d'un
membre quelconque de l'objet.
# Constantes de classe, attributs et
méthodes statiques
Constantes de classe
• Les attributs et méthodes définis dans une classe appartiennent en fait à
l'objet qui sera l'instance de cette classe. On s'est donc servi de l'opérateur ->
pour désigner un membre à partir de l'objet créé.
• Par conséquent on ne peut pas y accéder par l'opérateur -> mais plutôt par
l'opérateur de résolution de portée :: précédé par le nom de la classe dans l
aquelle ils sont définis.
• Pour spécifier si un membre est statique on déclare le mot clé static après
la visibilité.
Attributs et méthodes statiques(2/)
• L’appel des attributs et des méthodes statiques a l’intérieur de la classe
peut se faire avec le mot-clé self au lieu du nom de la classe.
Dans la pratique, on fait en sorte que cette méthode retourne le résultat esco
mpté par la fonction isset(), à savoir true si l'attribut existe et false si l'attribut
n'existe pas.
Méthodes __toString
• La méthode magique __toString() est appelé automatiquement quand on
tente de traiter un objet en tant que chaîne de caractères
(à l'aide de la structure echo par exemple).
• Pour procéder à l'héritage, on fait appel au mot clé extends comme ceci:
Héritage et la visibilité Protected
• Le principe d'encapsulation veut que tous les attributs soient privés.
• Mais si on veut hériter d'une classe, alors les attributs privés ne sont plus
réutilisables puisqu'ils sont reconnus uniquement au sein de la classe où ils
sont déclarés.
En fait, elle se comporte à peu près comme private. Les attributs ne sont
donc pas accessible de n'importe où comme c'est le cas pour public, mais
seulement à l'intérieur de la classe dans laquelle ils sont déclarés et dans les
classes qui héritent de cette classe là
Héritage et la visibilité Protected(2/)
Surcharge d'une méthode
• La classe fille a la possibilité de redéfinir les méthodes de la classe mère.
Ce phénomène est appelé surcharge de méthode.
Mot clé parent
Le mot clé self qui fait référence à la classe courante.
Dans l'exemple précédent on a appelé la classe Vehicule par son nom dans la
classe Fille pour appeler statiquement modeDeplacement().
Cette fois on va faire appel au mot clé parent qui désigne la classe dont on a
hérité.
Autrement dit, si nous sommes dans la classe Fille et on veut appeler statique
ment modeDeplacement() de la classe Vehicule, au lieux de mettre
Vehicule :: modeDeplacement(), on peut mettre parent::methode1().
Mot clé parent(2/)
# Classes et méthodes abstraites
(Mot clé abstract)
Classes abstraites
• Les classes abstraites s'inscrivent davantage dans la sûreté de la
programmation orientée objet.
La première particularité d'une classe abstraite, c'est qu'elle ne peut être insta
nciée (et donc créer un objet).
• Une classe déclarée abstraire peut aussi définir des méthodes abstraites.
Ces dernières devront obligatoirement être redéfinies dans les classes
dérivées. C'est un moyen de s'assurer que la classe dérivée adoptera le
comportement désiré.
méthodes abstraites
• Une méthode abstraite est aussi déclarée au moyen du mot-clé « abstract ».
C'est une méthode partiellement définie dans la classe.
Cela implique également que ses attributs et méthodes ne pourront plus être
redéfinis.
• Une classe abstraite peut contenir une méthode finale. Celle si ne doit pas
être redéfinie lors de l'héritage.
• Si une classe est finale, il est inutile d'y déclarer une méthode finale.
Dans tous les cas on ne peut pas hériter de la classe.
• Une méthode finale peut figurer dans une classe qui n'est ni finale ni
abstraite.
# Interfaces
Interface
• Quand on crée une classe, rien ne nous oblige à déclarer telle ou telle
méthode.
Nous sommes libres de déclarer ce qu'on veut avec les noms que l'on veut
(tant qu'ils respectent les spécifications décrites en PHP).
l'ultime différence entre une classe abstraite et une interface est que les
classes qui vont hériter des classes abstraites constituent des sous familles de
la classe mère, par contre une interface peut être utilisées par des classes
dont les finalités ne sont pas forcément semblables.
Soit la classe Vehicule les classes Filles qui peuvent en hériter sont Voiture,
Camion et Fourgon. Par contre les classes Vehicule et Maison ne sont pas de
la même famille.
Néanmoins chacune d'entre elles peut accueillir une méthode du nom de pein
dre(). C'est là où une interface qui renferme la méthode peindre() peut être
utile.
Interface (3/)
• Pour définir une interface, on utilise le mot clé interface.
• Pour se servir de l'interface créée, il faut l'implémenter par une classe à l'aid
e du mot clé implements
Interface (4/)
• Implémenter plusieurs interfaces:
• Il s'agit d'un bloc de code qui sera réutilisé par une classe.
• Pour créer un trait on déclare le mot clé trait suivi de son nom.
Trait(2/)
• Pour se servir du trait Notification dans une classe on procède comme ceci
• Vous avez compris que le code du trait Notification a été réutilisé comme
si'il était déclaré directement dans la classe Operation.
Un trait peut aussi définir des attributs qui seront repris pas la classe qui
l'utilisera.
# Les espaces de noms
(Namespaces)
Namespace
• En programmation on ne peut pas créer deux fonctions de même nom (de
même pour les classes et les constantes).
• La solution consiste donc soit à renommer nos éléments ou, mieux encore,
à les déposer dans des espaces différents (comme des répértoires sur un
système de fichiers).