Vous êtes sur la page 1sur 480
Sauf mention contraire, le contenu de cet ouvrage est publié sous la licence : Creative

Sauf mention contraire, le contenu de cet ouvrage est publié sous la licence :

Creative Commons BY-NC-SA 2.0 La copie de cet ouvrage est autorisée sous réserve du respect des conditions de la licence Texte complet de la licence disponible sur : http://creativecommons.org/licenses/by-nc-sa/2.0/fr/

Simple IT 2012 - ISBN : 979-10-90085-36-7

Avant-propos

L o rsque j’étais plus jeune, j’ai créé mes premiers sites web grâce au Site du Zéro que vous connaissez sans doute. Une fois le cours de Mathieu Nebra sur le PHP

achevé, je m’étais dit que j’avais plus ou moins fait le tour de ce langage et qu’il me resterait encore seulement deux ou trois choses à apprendre. Dans le but de m’améliorer, j’ai parcouru le Web pour découvrir les travaux d’autres passionnés. Beaucoup de personnes concevaient leur code de façon complètement inédite pour moi. Après quelques recherches, j’ai appris qu’il s’agissait de la programmation orientée objet. J’ai alors décidé d’approfondir mes recherches sur le sujet, et ai été très surpris de ne trouver aucun site proposant un cours sur cette méthode de programmation. Partout des « trucs et astuces », sans que personne n’explique véritablement les bases de ce concept et surtout ses possibilités.

Lassé de ne pas trouver de cours qui me corresponde, j’ai décidé d’apprendre par le biais de la documentation. J’y ai alors déniché tout ce dont j’avais besoin sur l’aspect programmation : je maîtrisais la syntaxe de la POO et je pouvais me débrouiller. Cependant, je sentais bien qu’il me manquait une énorme part de connaissance : j’étais incapable de concevoir une application entière avec cette méthode de programmation. J’avais, en réalité, cruellement besoin de pratique.

On m’a alors redirigé vers un framework en me disant qu’il s’agissait d’une boite à outils contenant une multitude de fonctions prêtes à être utilisées pour concevoir son site plus rapidement, le tout programmé de façon orientée objet. Enthousiaste à l’idée de découvrir une nouvelle notion, je m’y suis précipité. L’apprentissage fut difficile, mais j’avais enfin un exemple concret d’utilisation de la POO. C’est ensuite en décortiquant cette boite à outils, en analysant chaque outil et ce qui les liait, que j’ai enfin découvert toute la puissance de la POO. J’ai eu un déclic, tout est devenu plus clair à mes yeux :

à partir de ce moment-là, j’étais sûr de programmer uniquement de cette façon tant ce concept était bien pensé.

Je me suis alors dit que ce n’était pas normal qu’il n’y ait aucun cours francophone disponible sur le web qui explique de A à Z la programmation orientée objet en PHP :

son fonctionnement, ses possibilités et son utilisation. Pour éviter aux autres passionnés du web d’être perdu dans le monde de la POO, comme ce fut le cas pour moi à mes débuts, j’ai décidé de créer le cours que j’aurais tant aimé avoir à mes débuts.

Cette nouvelle façon de penser vous intéresse ? Vous avez envie de découvrir une nou- velle façon de vous organiser ? D’un code propre et facilement réutilisable ? Ça tombe

i

CHAPITRE 0. AVANT-PROPOS

bien, ce livre est là pour ça ! En partant du principe que vous ne connaissez strictement rien à la programmation orientée objet, il vous introduira dans ce nouveau monde et vous apportera les connaissances nécessaires pour que vous soyez capables de réaliser un site complet en suivant les principes de la POO.

La POO, une façon bien différente de voir les choses

Vous devez sans doute vous demander une chose : « Dans les grandes lignes, quelle différence y a-t-il entre la POO et la méthode de programmation que je connais ac- tuellement ? » L’expression même « programmation orientée objet », nous permet de comprendre que nous allons programmer avec des objets. Mais concrètement, les objets, qu’est-ce que c’est ?

À vrai dire, les objets avec lesquels nous allons travailler diffèrent peu des objets que vous connaissez déjà. Regardez autour de vous ! Des objets, il y en a partout : autour de vous, il y a peut-être une lampe ou une voiture. Ces objets possèdent des caractéris- tiques et des fonctionnalités (la lampe s’allume, la voiture démarre, etc.). Depuis que vous êtes nés, vous vivez entourés d’objets. Et bien pourquoi ne pas programmer avec des objets également ? C’est justement le but de la programmation orientée objet. Le principe de base est simple : l’application que vous développerez ne sera rien d’autre qu’un ensemble d’objets qui interagissent entre eux. Nous allons donc créer des objets et nous en servir et ce, tout au long de ce livre ! Comme vous vous en doutez, le nombre de choses que nous pouvons faire avec nos objets est assez important.

Si je devais vous citer les trois des avantages majeurs de la POO, ce serait :

1. Une conception plus intuitive : au début, vous aurez du mal à vous y faire, mais une fois le concept bien cerné (ce qui est l’objectif premier de ce livre), cela deviendra bien plus facile et surtout, plus intuitif.

2. Une réutilisation facilitée : comme nous le verrons plus tard, la programma- tion orientée objet permet de réutiliser son code facilement en l’exportant dans une application indépendante.

3. Une distribution plus aisée : si vous souhaitez partager votre code avec un autre développeur, vous vous rendrez compte que cela est plus facile à faire (c’est en grande partie pour quoi les frameworks et extensions de PHP sont programmés de façon orientée objet).

Il ne faut donc pas avoir peur de la programmation orientée objet : une fois bien maîtrisée, elle ne vous apportera que des avantages !

Qu’allez-vous apprendre en lisant ce livre ?

Je pars du principe que vous n’avez aucune connaissance en programmation orientée objet, seulement une base solide du langage PHP. Je vous propose de suivre quatre parties :

COMMENT LIRE CE LIVRE ?

1. Les bases de la POO : cette première partie théorique visera à vous enseigner les toutes les prérequis indispensables que vous devez connaître pour continuer. Nous poserons ainsi les bases de ce concept et commencerons à programmer notre première application au cours de travaux pratiques. Nous introduirons no- tamment des notions importantes telles que les classes, les objets, les instances, le principe d’encapsulation et l’héritage.

2. Techniques avancées : dans cette seconde partie théorique seront abordées des notions plus complexes. Vous entrerez ainsi dans les profondeurs de la program- mation orientée objet, notamment en abordant les concepts d’interfaces, de traits, d’exceptions et de designs patterns par exemple. À la fin de cette partie, un cha- pitre sera dédié à la réalisation d’un système de news pour mettre en pratique toute la théorie accumulée.

3. Réalisation d’un site web : cette troisième partie est purement pratique, au- cune nouvelle notion théorique ne sera abordée car vous posséderez toutes les connaissances nécessaires pour réaliser un site web entièrement programmé de façon orientée objet. Cependant, vous manquerez cruellement de pratique, et même si vous maîtriserez la dimension syntaxique de la POO, il sera fort pos- sible que vous n’arriviez pas encore à penser « orienté objet ». Cette partie est justement là pour vous y aider.

4. Annexes : cette dernière partie contient des parties que vous pouvez lire quand vous le souhaitez. Le niveau requis pour lire chaque partie sera spécifié au début de ces dernières. Généralement, les parties contenues dans ce chapitre sont des notions que je ne pouvais pas introduire dans le cours au risque de le compliquer inutilement (il s’agit essentiellement de notions peu importantes ou rarement utilisées).

Comment lire ce livre ?

Suivez l’ordre des chapitres

Lisez ce livre comme on lit un roman. Il a été conçu pour cela.

Contrairement à beaucoup de livres techniques où il est courant de lire en diagonale et de sauter certains chapitres, il est ici très fortement recommandé de suivre l’ordre du cours, à moins que vous ne soyez déjà un peu expérimentés.

Pratiquez en même temps

Pratiquez régulièrement. N’attendez pas d’avoir fini de lire ce livre pour allumer votre ordinateur et faire vos propres essais.

CHAPITRE 0. AVANT-PROPOS

Utilisez les codes web !

Afin de tirer parti du Site du Zéro dont ce livre est issu, celui-ci vous propose ce qu’on appelle des « codes web ». Ce sont des codes à six chiffres à saisir sur une page du Site du Zéro pour être automatiquement redirigé vers un site web sans avoir à en recopier l’adresse.

Pour utiliser les codes web, rendez-vous sur la page suivante 1 :

http://www.siteduzero.com/codeweb.html

Un formulaire vous invite à rentrer votre code web. Faites un premier essai avec le code ci-dessous :

Tester le code web

Code web : 123456

Ces codes web ont deux intérêts :

– ils vous redirigent vers les sites web présentés tout au long du cours, vous permettant ainsi d’obtenir les logiciels dans leur toute dernière version ;

– ils vous permettent de télécharger les codes sources inclus dans ce livre, ce qui vous évitera d’avoir à recopier certains programmes un peu longs.

Ce système de redirection nous permet de tenir à jour le livre que vous avez entre les mains sans que vous ayez besoin d’acheter systématiquement chaque nouvelle édition. Si un site web change d’adresse, nous modifierons la redirection mais le code web à utiliser restera le même. Si un site web disparaît, nous vous redirigerons vers une page du Site du Zéro expliquant ce qui s’est passé et vous proposant une alternative.

En clair, c’est un moyen de nous assurer de la pérennité de cet ouvrage sans que vous ayez à faire quoi que ce soit !

Remerciements

La réalisation de ce livre ne se serait pas faite sans le soutien de plusieurs personnes que je souhaite remercier :

– Ma famille, notamment mes parents, qui m’ont toujours soutenu dans ce que j’en- treprenais.

– L’équipe de Simple IT, notamment Mathieu Nebra et Pierre Dubuc qui ont cru en ce projet, ainsi que Zeina Hadati, Anna Schurtz et Jonathan Baudoin qui ont effectué un très gros travail pour le réaliser.

– Tous les membres du Site du Zéro, notamment Baptiste Clavié (Talus), Christophe Tafani-Dereeper (christophetd), ‘Haku, Nami Doc, artragis, gripsou, Gugelhupf et bien d’autres, qui m’ont encouragé et apporté leurs précieux conseils pour donner au cours la qualité qu’il possède aujourd’hui.

1. Vous pouvez aussi utiliser le formulaire de recherche du Site du Zéro, section « Code web ».

Sommaire

Avant-propos

i

La POO, une façon bien différente de voir les choses

.

.

.

.

.

.

.

.

.

.

.

.

.

.

ii

Qu’allez-vous apprendre en lisant ce livre ?

 

ii

Comment lire ce livre ?

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

iii

Remerciements

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

iv

I [Théorie] Les bases de la POO

 

1

1 Introduction à la POO

.

3

Qu’est-ce que la POO ?

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

4

Créer une classe

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

7

2 Utiliser la classe

11

Créer et manipuler un objet

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

12

Les accesseurs et mutateurs

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

18

. L’auto-chargement de classes

Le constructeur .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

23

26

3 L’opérateur de résolution de portée

Les constantes de classe

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

31

32

. Les attributs et méthodes statiques .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

35

4 Manipulation de données stockées

 

41

v

SOMMAIRE

Une entité, un objet

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

42

. Gérer sa BDD correctement

L’hydratation

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

47

55

5 TP : Mini-jeu de combat

61

. Première étape : le personnage

Ce qu’on va faire

. Seconde étape : stockage en base de données

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

62

63

72

Troisième étape : utilisation des classes

 

77

Améliorations possibles

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

91

6 L’héritage

93

Notion d’héritage

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

94

Un nouveau type de visibilité : protected

Imposer des contraintes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

100

101

. Résolution statique à la volée

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

105

7 TP : Des personnages spécialisés

 

117

Ce que nous allons faire

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

118

. Améliorations possibles

Correction

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

121

136

8 Les méthodes magiques

137

Le principe

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

138

Surcharger les attributs et méthodes

Linéariser ses objets

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

138

147

. Autres méthodes magiques

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

152

II

[Théorie] Techniques avancées

 

157

9 Les objets en profondeur

159

Un objet, un identifiant

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

160

Comparons nos objets

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

163

Parcourons nos objets

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

166

10 Les interfaces

169

SOMMAIRE

Présentation et création d’interfaces

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

170

Hériter ses interfaces

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

172

Interfaces prédéfinies .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

174

11 Les exceptions

189

Une différente gestion des erreurs

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

190

Des exceptions spécialisées .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

194

Gérer les erreurs facilement

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

200

12 Les traits

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

205

Le principe des traits .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

206

Plus loin avec les traits

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

212

13 L’API de réflexivité Obtenir des informations sur ses classes

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

217

218

Obtenir des informations sur les attributs de ses classes

.

.

.

.

.

.

.

.

.

.

.

.

223

Obtenir des informations sur les méthodes de ses classes

 

227

Utiliser des annotations

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

232

14 UML : présentation (1/2)

.

.

. Modéliser une classe

UML, kézako ?

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

241

242

244

. Modéliser les interactions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

246

15 UML : modélisons nos classes (2/2)

 

251

Ayons les bons outils .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

252

Modéliser une classe

Modéliser les interactions

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

255

262

Exploiter son diagramme

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

266

16 Les design patterns

271

Laisser une classe créant les objets : le pattern Factory

 

272

. Séparer ses algorithmes : le pattern Strategy

Écouter ses objets : le pattern Observer

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

273

280

Une classe, une instance : le pattern Singleton

 

283

L’injection de dépendances

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

285

SOMMAIRE

17

TP : un système de news

291

Ce que nous allons faire

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

292

Correction

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

295

III

[Pratique] Réalisation d’un site web

 

311

18 Description de l’application

 

313

Une application, qu’est ce que c’est ?

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

314

. Résumé du déroulement de l’application

Les entrailles de l’application

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

318

323

19 Développement de la bibliothèque

 

325

L’application

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

326

Le routeur

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

332

Le back controller

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

340

. Bonus : l’utilisateur

La page

.

. Bonus 2 : la configuration

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.