POO en PHP (2) - Classe et instance de classe (objet)

Dans cette leçon vidéo, l’instructeur explique les concepts fondamentaux de la programmation orientée objet (POO) en PHP en se concentrant sur la création de classes et l’instanciation d’objets. Il montre comment déclarer une classe (ex. Voiture) avec la syntaxe `class`, les conventions de nommage, et comment définir son corps. Il décrit la différence entre les membres de la classe – attributs (variables) et méthodes (fonctions) – ainsi que la notion de visibilité (public, private, futur protected) et l’importance de l’encapsulation. L’exemple illustre la création d’objets via le mot‑clé `new`, l’accès aux attributs avec l’opérateur `->` et le mot‑clé `$this`. Il montre comment rendre les attributs privés, puis les manipuler à travers des méthodes publiques comme `afficherCouleur`, `repeindre`, `accelerer` et `afficherVitesse`. Le cours démontre que chaque instance possède ses propres copies d’attributs, en créant plusieurs objets (berline, SUV) et en affichant leurs états indépendants. Enfin, il résume les bonnes pratiques : déclarer les attributs privés, contrôler les modifications via des méthodes publiques, et rappelle que d’autres notions (protected, etc.) seront abordées ultérieurement.
Chapters
Bonjour à tous et bienvenue dans cette nouvelle leçon de programmation orientée objet en PHP. Aujourd'hui nous allons découvrir les classes et les instances de classes dites objets. Lors de la dernière vidéo, j'ai mentionné qu'une classe est un moule à objets. C'est grâce à lui que l'on va créer tous les objets similaires de notre projet. Par exemple, si on veut créer des voitures, alors on aura besoin d'une classe qui va assurer cette opération. Donc nous allons créer une classe qui s'appelle Voiture de la manière suivante: Tout d'abord, il faut préfixer sa classe par le mot-clé class pour dire qu'il s'agit bien d'une classe et pas d'autre chose. Ensuite, on va nommer notre classe de cette manière et on ouvre les accolades. Vous avez remarqué que j'ai capitalisé le nom de la classe. Ce n'est pas une obligation mais c'est une recommandation, ou plutôt une convention, c'est-à-dire que la plupart des développeurs ont pour coutume de capitaliser les noms de leurs classes. Et vous avez sans doute deviné que c'est entre les accolades que l'on va spécifier le corps de notre classe. Donc l'opération qui viendra ensuite c'est créer des objets. Par exemple on va créer un objet Voiture qui s'appelle berline de la manière suivante. Et ensuite on va mettre le mot-clé new comme ceci que l'on va faire suivre par le nom de la classe. Alors là ce que je viens de faire c'est créer un objet qui s'appelle berline à partir de la classe qui s'appelle Voiture. Souvenez-vous bien que la classe c'est le moule à objets, c'est lui qui va créer tous les objets qui sont similaires dont on aura besoin dans notre projet. Et dans ce cas je viens d'en créer un, donc c'est l'objet berline. Alors il faut mettre le mot-clé new et ensuite le nom de la classe. On appelle cette opération l'instanciation de la classe, comme ceci. C'est-à-dire que je viens d'instancier la classe Voiture. Conséquent, j'ai créé une instance de classe qui est l'objet Berlin. Alors $Berlin c'est un objet et c'est aussi une instance de classe. Alors c'est un jargon qu'il faut apprendre parce que dorénavant on aura besoin de ce lexique. De la même façon, je peux créer d'autres objets, par exemple l'objet SUV, voilà, objet limousine, etc. Ça veut dire, vous avez vu que je dispose d'une seule classe, mais avec celle-ci j'ai pu créer de nombreux objets. En réalité, le nombre d'objets à créer est illimité. Pour le moment, nous allons nous contenter d'un seul objet qui est l'objet berline. Et ce qu'il faut faire maintenant, c'est mettre quelque chose dans le corps de la classe. En fait, le code que l'on vient d'écrire ici n'est pas faux, mais quand on l'exécute, il va rien donner parce que tout simplement notre classe ne fait rien du tout. Alors il faut bien y mettre des instructions qui vont lui dicter comment il va se comporter. Notez qu'une classe contient ce que l'on appelle des membres. Ce sont des éléments internes à la classe. Ces membres, ce sont eux qui vont spécifier les caractéristiques et le comportement de l'objet. Par exemple, si on pense à une voiture, on pense implicitement à des caractéristiques comme la couleur, la puissance, la vitesse maximale, le nombre de places, le type de carburant ou d'énergie pour être plus général, etc. Et si on réfléchit au comportement de la voiture, alors on va forcément penser à quelque chose comme accélérer, ralentir, repeindre, etc. Quand on dit repeindre, c'est pas la voiture qui va forcément s'auto-repeindre, mais c'est une opération qui sera menée par une autre entité par exemple. Mais pour le moment on va dire que repeindre c'est aussi un comportement de la voiture, c'est-à-dire une manière qui lui permet de changer sa couleur. Alors commençons par déclarer les caractéristiques de la classe Voiture. Dans le jargon de la programmation orientée objet on appelle ces caractéristiques des attributs. Ce sont tout simplement des variables que l'on va déclarer de la manière suivante: par exemple la variable couleur que je vais initialiser avec la valeur rouge. Bien sûr, c'est pas trop pratique parce que toutes les voitures que je vais créer par la suite seront rouges. Alors ce n'est pas une obligation, mais pour le moment, juste pour simplifier, on va dire que tous les objets ou bien toutes les instances qui seront nouvellement créées seront de couleur rouge. On va maintenant déclarer l'attribut vitesse avec une valeur initiale 0. En fait, ce n'est pas la vitesse maximale de la voiture, mais c'est la vitesse que l'on peut voir au compteur. Initialement c'est égal à 0 pour dire que la voiture est à l'arrêt. Pour le moment le code n'est pas tout à fait correct. En réalité avant de déclarer les attributs, bon les membres en général, il faut les précéder par ce que l'on appelle la visibilité. Par exemple pour la couleur on va mettre public et aussi pour la vitesse. On appelle public la visibilité, c'est-à-dire que cet attribut sera visible un peu partout parce qu'il est public. Ce cas il sera accessible depuis l'intérieur de la classe Voiture et même depuis l'extérieur de la classe Voiture. À titre d'exemple, imaginez que je veux afficher la couleur de la voiture que je viens de créer. Alors je vais mettre ici echo et je vais déclarer le nom de l'instance berline sans oublier le dollar bien sûr et ensuite je vais spécifier l'attribut que je veux afficher et pour faire référence à l'attribut on utilise l'opérateur flèche comme ceci. Dans d'autres langages de programmation on remplace flèche par point, mais en PHP le point est un caractère déjà réservé pour la concaténation des chaînes de caractères. Alors on met flèche et ensuite on va mettre couleur comme ceci. Vous avez remarqué que j'ai pas mis le dollar de couleur parce que le dollar il est placé ici. Alors tout ça c'est l'attribut qui commence par un dollar, ça veut dire on peut considérer tout ça comme étant la variable. Maintenant exécutons le code pour voir le résultat et ça m'affiche bel et bien rouge, c'est-à-dire que maintenant j'ai pu accéder à cet attribut depuis l'extérieur de la classe. Mais en fait ce n'est pas très pertinent de déclarer ces attributs en tant que public, alors il faut plutôt mettre privé comme ceci. Voilà, maintenant la couleur elle est privée et la vitesse est publique. Donc techniquement je peux accéder à la vitesse de n'importe où, c'est-à-dire de l'intérieur de la classe comme de l'extérieur. Par contre l'attribut qui est privé, qui est dans ce cas couleur, est accessible uniquement depuis l'intérieur de la classe. Bon, exécutons maintenant le même code pour voir le résultat. Et ça m'affiche une erreur qui dit bien qu'on ne peut pas accéder à une propriété ou bien attribut privé. Bien sûr, il y a beaucoup d'autres détails qui ont été mentionnés, mais on va voir ça dans des vidéos prochaines. Pour le moment, sachez que le fait de choisir ses membres en tant que privé ou bien public est connu en programmation orientée objet par le nom d'encapsulation. L'encapsulation est la manière avec laquelle le développeur choisit la visibilité de ses membres. C'est-à-dire rien ne vous oblige de déclarer vos attributs en tant que privé ou bien en tant que public. Mais il est préférable que les attributs soient privés afin de ne pas les modifier comme bon nous semble de n'importe où. C'est-à-dire qu'il faut bien contrôler leurs modifications. C'est pourquoi on va essayer d'assurer cette opération depuis l'intérieur de la classe. Mais il se peut bien que dans une situation particulière vous aurez besoin d'un attribut qui est public. Mais la question est: puisque mes attributs sont privés dans ce cas, alors comment je pourrais faire pour y accéder? La réponse est l'utilisation des méthodes. Comme je l'ai dit tout à l'heure, une classe dispose de membres. Ces membres peuvent être soit des caractéristiques qui sont des attributs ou bien des méthodes qui représentent le comportement. Dans ce cas, on va créer des méthodes qui vont nous assurer de manipuler nos attributs. Et la première méthode que je vais déclarer, c'est la méthode qui me permet d'afficher la couleur de ma voiture. Je mettrai donc ici un truc du genre function parce que la méthode est une fonction et je l'appellerai afficherCouleur Dans un premier temps, je mettrai pas d'arguments et dedans je vais essayer d'afficher la couleur de ma voiture. Je mettrai par exemple liter et là j'affiche la couleur de cette manière. Bon, quand je mets ceci, en fait couleur est une variable locale et n'est pas un attribut. Alors pour dire que c'est un attribut, il faut bien spécifier à quel objet elle appartient. Et bien sûr, je pourrais pas mettre berline comme ceci. Parce qu'au moment de la création de ma classe, je sais pas si le développeur va créer une instance qui s'appelle Berlin ou non. Alors il faut bien que cet attribut soit valable quel que soit le nom de l'instance de classe qui sera créée par la suite. Donc au lieu de mettre Berlin, je mettrai ici le mot-clé this. Le mot-clé this fait référence à l'instance de classe, c'est-à-dire que si la classe s'appelle Berlin, alors this sera remplacé par $berlin. S'il s'appelle SUV, donc il sera remplacé par SUV, etc. Donc maintenant le fait d'appeler la méthode afficherCouleur, il va tout simplement afficher la couleur courante de l'objet qui est dans ce cas initialisée avec la valeur rouge. Cependant les méthodes elles aussi doivent avoir une visibilité et puisque je veux afficher la couleur alors forcément c'est une chose que je vais faire de l'extérieur de la classe, alors il faut que ça soit public. Notez qu'il existe un troisième type de visibilité dit protégé mais que l'on va voir dans des futures vidéos. Maintenant je vais appeler la méthode afficherCouleur. Alors c'est une méthode qui appartient toujours à l'objet que je viens de créer. Je mettrai ici afficherCouleur comme ceci. Alors je vais afficher le résultat retourné par la méthode afficherCouleur. Exécutons pour voir. Et maintenant ça m'affiche rouge. Bien que l'attribut est privé, mais j'ai pu l'afficher parce que je n'ai pas fait directement de l'extérieur de la classe, mais je l'ai fait à travers une méthode depuis l'extérieur de la classe, mais la méthode elle-même est déclarée à l'intérieur. Du coup, il a accès à l'attribut couleur. De la même manière, je peux créer une méthode qui permet de repeindre ma voiture comme ceci, et je vais appliquer la nouvelle valeur. Bon, je vais considérer que la valeur, je vais la passer en argument. Je mettrai ici par exemple couleur. Bon, notez que couleur que j'ai là, c'est différent de couleur que j'ai ici parce que là c'est un argument et ici c'est un attribut. Mais bon, pour éviter toute confusion, on mettra juste C'est haut comme ceci. Donc maintenant, avant d'afficher la couleur, je vais la changer. Je mettrai donc, et comme valeur je mettrai blanc. Exécutons maintenant pour voir le résultat, et ça m'affiche blanc. Maintenant on va créer un autre objet, par exemple SUV. Et je vais afficher sa couleur. Je mettrai carrément ici un echo br pour assurer un retour à la ligne. Quand j'affiche, attention j'ai oublié de mettre echo ici, ça m'affiche blanc et rouge. C'est-à-dire que j'ai 2 objets qui sont indépendants, bien que l'attribut c'est le même, mais en fait c'est un attribut qui est créé pour chacun des objets. Alors c'est le même attribut avec deux valeurs différentes selon l'objet qui est l'instance de la classe. Effaçons maintenant ceci. De la même manière, je vais créer une méthode qui permet d'accélérer la voiture. Je mettrai par exemple— bon, bien sûr, il faut pas mettre les accents parce que ce sont des noms de fonctions. Et je vais mettre ici vsAccélérer. Vitesse++. Alors je vais incrémenter la vitesse de 1 sans oublier de mettre vitesse en tant que privé. Et une autre méthode qui va afficher la valeur du compteur et je mettrai lecture this.vitesse. Donc maintenant ici je vais essayer d'accélérer, je mettrai donc et ensuite je vais afficher la valeur du compteur. Exécutons pour voir le résultat et ça m'affiche 1 sachant que la valeur initiale c'est 0. Maintenant si j'exécute cette méthode plusieurs fois, par exemple 3 fois, Alors il va m'afficher à 3. Alors généralement c'est comme ça qu'on va appréhender nos classes. À chaque fois que vous créez une classe, il faut y créer des membres. Les membres sont soit des attributs ou bien des méthodes. Bien entendu il y a d'autres choses que l'on peut intégrer dedans mais on va voir ça plus tard. Notez qu'à chaque fois que vous déclarez un membre, il faut le précéder par la visibilité, qu'il soit public ou bien privé, sachant qu'il existe une autre visibilité que l'on va voir dans une future vidéo. Généralement pour les attributs, il faut les déclarer en tant que privés pour ne pas permettre à quiconque de les modifier de l'extérieur de la classe. Alors il faut contrôler leur modification à travers des méthodes qui sont généralement publiques et ce sont elles qui sont manipulées par les développeurs depuis l'extérieur de la classe. J'espère que vous avez compris maintenant ce que c'est qu'une classe, comment la déclarer et comment l'instancier. Merci pour votre attention et à la vidéo prochaine.
More from Yamossoun

Algorithme de calcule de la racine carrée par dichotomie #dichotomy #squareroot #algorithm









