Les classes et les objets

Introduction à l'orienté objet

10/09/2008 2397 lectures 2 commentaires 5/5 (3 votes)
Nous voici dans une partie particulièrement interessante de PHP. Pour ceux qui ont déjà développé dans un langage orienté objet tel que le C# ou le Java, ils n'apprendront rien de bien nouveau dans ce cours. Par contre, pour ceux qui n'ont jamais entendu parler de cela, je leur conseille d'être très attentif à ce cours. Une bonne compréhension de la théorie vous permettra d'utiliser efficacement PHP.

La base de l'orienté objet se trouve dans... les objets, hé oui. C'est une approche qui permet de programmer en imaginant que l'on travaille sur un élément du monde réel. Nous allons voir cela par un exemple concret au lieu de se perdre dans d'interminable explication théorique. Imaginez que le rôle de votre page PHP soit de gérer des personnes. Une personne est identifiée par un numéro unique et comporte un nom et un prénom. Une solution possible serait de créer un tableau associatif. La clé de ce tableau serait l'identifiant de la personne. Ce tableau serait à deux dimensions, si bien que si on désirait obtenir le nom de la personne avec l'identifiant 5, il suffirait de faire :



Et cela fonctionnerait très bien. Imaginons maintenant que ce membre travaille dans une entreprise dans laquelle il est identifié par un trigramme. Ce trigramme serait la première lettre de son prénom suivie par les deux première lettre de son nom. Vous allez donc développer une fonction qui prendre en paramètre le nom et le prénom de la personne qui fera la transformation et qui finalement renverra le trigramme que vous devrait stocker dans un champ trigramme de votre tableau associatif. C'est bien, mais c'est un peu excessif quand on connait l'orienté objet.

Au lieu de penser à la programmation de façon plate, imaginez vous dans le monde réel. Il serait bien plus simple de posséder une variable qui serait en fait une personne avec toutes ces informations. C'est possible avec l'orienté objet. Avant d'aller plus loin dans nos explications, nous devons bien faire la différence entre une classe et un objet.

Pour faire la correlation avec le monde réel, nous pouvons dire qu'une classe est une voiture, mais qu'une peugeot 307 rouge est un objet. Une personne est une classe mais Monsieur Dupond qui a 37 ans est un objet. Une classe est en fait le squelette d'un objet. Quand nous disons une voiture, aucune propriété n'est fixée, donc elle n'a pas de couleur ni de marque. Si nous créons une voiture, nous allons fixer ses propriétés, si bien qu'on va la peindre en rouge et ce sera une peugeot, elle devient alors un objet. Une classe est en fait un moule pour un objet. Il est possible de créer un nombre inifini d'objet depuis une classe.

Pour en revenir à notre premier exemple, voici comment nous pourrions réaliser la gestion des personnes uniquement avec une classe. Tout d'abord, il suffirait de créer la classe personnes qui contiendrai les champs identifiant, nom et prenom. Le tableau associatif contiendrai toujours des cellules identifiées par l'identifiant du membre, mais cette fois, ce tableau ne serait pas à deux dimensions. La cellule 5 par exemple, ne contiendrai plus un autre tableau comme précédemment, mais un objet. Un objet du type personne. Nous pourrions alors grace à cette objet récupérer simplement le nom de la personne.

Pour ce qui est de la fonction génératrice du trigramme, il suffirait de l'implémenter dans la classe, ainsi il ne serait plus nécessaire de passer le nom et le prénom de la personne en paramètre.

J'imagine que vous êtes complètement paumé... C'est normal. Nous allons donc revoir tout ce que vous venez de lire mais d'une façon bien plus pratique. Vous allez d'abord développer la page PHP de gestion de personne sans recourir aux classes. Une fois ceci fait, nous verrons comment la redévelopper en utilisant la programmation orientée objet.

Sans les classes



Nous allons créer deux personnes : Richard Pretty et Bernard Bilou. Leur identifiant sera respectivement 1 et 2. Nous allons ensuite afficher leur nom et prenom, générer leur trigramme et enfin les afficher. Commencez donc par créer et remplir le tableau :



Maintenant que votre tableau est créé, nous allons simplement afficher les deux personnes :



Le résultat affiché à ce stade du développement sera :

Le client avec l'identifiant 1 est : Pretty Richard
Le client avec l'identifiant 2 est : Bilou Bernard

Créons maintenant la fonction qui sera chargée de générer les trigrammes. Tapez donc au dessus de votre code :



Appelons maintenant cette fonction pour sauvegarder les trigramme des deux personnes. Tapez donc à la suite du code tapé précédemmet :



Enfin, la dernière étape consiste simplement à afficher les deux membres ainsi que leur trigramme :



Le résultat final de ce script est le suivant :

Le client avec l'identifiant 1 est : Pretty Richard
Le client avec l'identifiant 2 est : Bilou Bernard
Le client avec l'identifiant 1 est : Pretty Richard et son trigramme est RPR
Le client avec l'identifiant 2 est : Bilou Bernard et son trigramme est BBI

Il est difficile de voir le moindre inconvénient dans ce code, mais vous allez voir qu'il y en a. Nous en parlerons une fois la méthode avec l'orientée objet expliquée.

Avec les classes



La façon de créer une classe est très simple. C'est comme une fonction sauf que le mot clé n'est plus function mais class. Attaquons donc directement la création de la page en créant une classe :



Comme nous l'avons vu, une personne a plusieurs propriétés : son identifiant, son trigramme, son nom et son prénom. Nous allons donc définir ces 3 propriétés dans la classe. Pour définir une propriété d'une classe, il suffit de le faire comme si vous déclariez une variable, à l'exception pres que vous devez faire précéder celle-ci par le mot clé var. A l'intérieur des accolades de la classe, tapez donc :



La classe est presque prête. Il faudra la modifier quand nous implémenterons la fonction pour la génération du trigramme, mais nuos allons y revenir. Nous allons tout d'abord créer les 2 objets de la classe personnes. Pour créer un objet, il faut utiliser le mot clé new. Tapez le code suivant en dessous de l'accolade fermante de la classe :



Aie aie aie, qu'est-ce que c'est que ça... Vous allez voir que c'est en fait très simple. Comme précédemment, nous créons un tableau qui s'appelera personnes. Ensuite, nous créons un objet de la classe personnes grâce au mot clé new et nous plaçons cet objet dans la cellule identifiée par le numero 1 du tableau. Une fois ceci fait, nous intialisons simplement les valeurs de l'objet. Effectivement, pour accéder aux propriétés d'un objet (celles déclarées entre les accolades de la classe), il suffit de taper le nom de l'objet suivi d'une flèche (->) et du nom de la propriété. Nous initialisons donc les 3 champs de l'objet et nous créons ensuite un deuxième objet que nous plaçons dans la cellule suivante du tableau.

Nous allons maintenant afficher les valeurs des personnes :



Nous affichons simplement la valeur des propriétés de l'objet de la même façon que nous les avons initialisées. Nous allons maintenant passer à la fonction génératrice du trigramme. L'avantage avec les objets, c'est qu'on peut leur attribuer des propriétés (telles que le nom, le prenom,...) mais également des fonctions. Les fonctions attachées aux objets s'implémentent à l'intérieur même de la classe. Quand ces fonctions s'exécutent, elles ont accès automatiquement aux valeurs des propriétés de l'objet sur lequel on applique la fonction. Tapez donc le code suivant après la déclaration des 4 propriétés entre les accolades de la classe personnes :



La fonction est sensiblement différente par rapport à tantot. La première question que vous devez vous poser en voyant cette fonction est "mais c'est quoi $this ?". En fait, lorsque vous appliquer une fonction à un objet, la fonction reçoit implicitement et de manière transparente l'objet en paramètre. Ce paramètre se nomme $this. C'est très pratique car dans le cas présent, nous devons justement récupérer le nom et le prénom de l'objet pour lequel on applique la fonction dans le but de générer le trigramme. L'objet est donc nommé $this. Nous allons également devoir modifier la valeur de la propriété trigramme de cette objet, nous modifions donc $this->trigramme. Cela permet donc de modifier la valeur de la propriété trigramme de l'objet sur lequel est appliquée la fonction. Nous générons le trigramme de la même façon que précédemment.

Maintenant que nous avons implémenté cette fonction, nous allons devoir l'utiliser. A la suite du code permettant d'afficher les deux membres, tapez :



Tout de suite, c'est plus rapide et bien plus clair. Il suffit de récupérer l'objet dans le tableau et lui appliquer la fonction comme si on appelait simplement une de ces propriétés. Nous allons maintenant afficher les deux membres pour voir si la fonction s'est bien exécutée :



L'exécution de cette page affichera :

Le client avec l'identifiant 1 est : Pretty Richard
Le client avec l'identifiant 2 est : Bilou Bernard
Le client avec l'identifiant 1 est : Pretty Richard et son trigramme est RPR
Le client avec l'identifiant 2 est : Bilou Bernard et son trigramme est BBI

Pour ceux qui connaissent l'orienté objet, rassurez vous, nous parlons des constructeurs mais pas dans ce cours-ci (dans le prochain). Pour ceux qui ne savent pas ce que c'est, ce n'est pas grave, vous le verrez dans le cours prochain. Sachez juste qu'il est possible d'encore simplifier beaucoup plus ce code.

Pour parler des avantages, il y en a un très clair. Imaginez un projet de gestion d'entreprise pour lequel vous n'utilisez pas les classes. Ce genre de projet contiennent généralement plusieurs pages PHP et le tableau de personnes contiendra bien plus que 2 personnes. Imaginez maintenant que la fonction génératrice de trigramme doit en plus prendre en considération l'age de la personne et le coller à la fin du trigramme. Vous allez être obligé de modifier la fonction et en plus, tous les appels à cette fonction. Dans un projet contenant une vingtaine de pages, c'est un problème très contraignant. Imaginez maintenant que vous avez fait cela avec des classes. Il vous suffira de simplement modifier la fonction de la classe personnes et c'est tout. Il n'y aura pas besoin de modifier les appels à la fonction.

L'orienté objet est très pratique et a de nombreux avantages. Vous les découvrirez petit à petit lors de votre lecture des pages de ce site.

Voter :

2 commentaires

  • cunimb a dit:

    22/10/2010

    Vraiment : FELICITATIONS !!!

    Je trouve ce tuto excellent. Vraiment très très bien expliqué. Depuis longtemps j'essayais de comprendre l'intérêt de la poo. J'ai essayé de lire beaucoup de tuto, mais n'ai jamais bien compris. Ici tout est parfaitement clair.

    Mes chaleureux remerciements à l'auteur.

  • Débutant a dit:

    05/01/2010

    Merci pour ce tutoriel très clair, vraiment très bien commenté étape par étape et que j'ai été capable de comprendre.
    Une telle clareté dans les explications, du début à la fin, sans bug et sans omettre un petit quelque chose est assez rare et je tiens à vous le signaler.
    (à part le site du zéro évidemment)

Ajouter un commentaire