POO en PHP (5) - Attributs et méthodes statiques

Dans cette leçon vidéo, l’instructeur explique le concept des membres statiques en PHP, à la fois les méthodes et les attributs. En partant d’une classe Facture déjà présentée dans la leçon précédente (avec une constante TVA et une méthode montantTTC), il montre comment transformer la méthode montantTTC en méthode statique en ajoutant le mot‑clé static et en l’appelant via Facture::montantTTC() au lieu d’une instance. Il démontre que l’appel via une instance reste possible mais inutile, puis supprime l’instanciation pour souligner le gain de clarté. Ensuite, il introduit les attributs statiques : déclaration avec private static $at, initialisation dans le constructeur, accès via self::$at, et affichage via une méthode non statique. Il montre comment modifier cet attribut statique depuis une instance, puis comment la modification se reflète automatiquement dans toutes les nouvelles instances (obj2). Le cours se conclut sur les bonnes pratiques – n’utiliser le static que lorsque l’on n’a pas besoin d’une instance, et privilégier les attributs statiques pour des valeurs partagées comme un compteur de visites.
Chapters
Bonjour à tous et bienvenue dans cette nouvelle leçon de programmation orientée objet en PHP. Aujourd'hui, nous allons voir les attributs et méthodes statiques. Lors de la dernière leçon consacrée aux constantes de classe, nous avons vu le code suivant: nous avons créé une classe qui s'appelle Facture dans laquelle on a fixé une constante de classe TVA qui permet de définir un taux de TVA de 20%. Ensuite, nous avons déclaré une méthode du nom de montantTTC. Cette méthode permet de nous renvoyer le montant TTC après avoir appliqué le taux de TVA fixé. Ensuite, nous avons instancié la classe en créant un objet qui s'appelle facture1 et puis nous avons appelé la méthode montantTTC en faisant référence à l'instance de classe créée. Si on regarde ce code de plus près, vous allez sentir qu'il n'y a vraiment aucun besoin d'instancier la classe afin d'appeler cette méthode. Alors, il sera nettement mieux si on arrive à appeler la méthode montantTTC sans vraiment instancier la classe. Et c'est justement ça le rôle des méthodes statiques. Une méthode statique est une méthode qui n'appartient pas à l'objet ou à l'instance de classe, mais elle appartient plutôt à la classe. Donc ce que nous allons faire maintenant, c'est modifier ce code légèrement afin de déclarer la méthode montantTTC en tant que méthode statique sans vraiment changer le comportement de notre code. D'ailleurs, si on exécute le code qu'on a déjà, on aura le résultat suivant. C'est-à-dire on arrive à calculer le montant TTC en passant un montant hors taxes qu'on a fixé à 1000. Donc pour déclarer une méthode statique, on va faire appel au mot-clé static que l'on déclare entre la visibilité et le mot-clé function comme ceci. Désormais la méthode mon dans TTC est une méthode statique, c'est-à-dire que l'on peut l'appeler sans vraiment instancier la classe. Et pourtant, même avec cette légère modification, on peut toujours accéder à cette méthode via l'instance de classe, c'est-à-dire si j'exécute, j'aurai toujours le même résultat donc rien n'a changé. Mais l'objectif c'est de supprimer carrément cette ligne de l'instanciation. Alors on va enlever ça et bien sûr l'objet facture1 n'existe plus. Bon, ce que nous allons faire maintenant c'est remplacer ça par le nom de la classe Facture comme ceci. Et bien entendu on va pas conserver cet opérateur parce qu'on va établir un accès statique à notre méthode exactement comme on a fait pour l'accès à la constante de classe. On utilisera donc l'opérateur de résolution de portée représenté par double deux-points. Exécutons maintenant le code. Alors ça donne la même chose. Donc vous avez constaté que le code est devenu nettement mieux puisqu'on n'a même pas besoin d'instancier la classe. Il faut noter que ce genre de méthode est très sollicité en programmation orientée objet. Donc c'est à vous de juger quand est-ce qu'il faut déclarer une méthode statique et quand est-ce qu'il faut déclarer une méthode normale. Ça dépend bien sûr de votre besoin. Mais mettez-vous en tête que tant que vous ne sentez pas l'obligation d'instancier votre classe, alors pas la peine de le faire. Un simple accès statique peut largement être utile. En ce qui concerne les attributs statiques, ils sont aussi des attributs qui appartiennent à la classe et non à l'instance de classe. Et pour les déclarer, on va faire la même chose que pour des attributs classiques, mais on va toujours faire appel au mot-clé static comme ceci. Par exemple, private static, par exemple l'attribut il s'appelle@ comme ça. Ensuite, on va créer le constructeur qui va initialiser cet attribut. Et pour accéder à l'attribut, on va bien sûr procéder à l'appel statique. On mettra donc self pour faire référence à la classe courante, ça veut dire Facture. On mettra at et notez bien qu'ici j'ai conservé le dollar. Ce n'est pas comme si vous accédez via la pseudo-variable $this. Donc là, il faut mettre le dollar pour l'attribut statique. Et je mets par exemple la valeur POO. Donc là, je viens d'initialiser l'attribut statique du nom de $at. Maintenant on va créer une autre méthode qui permet d'afficher cet attribut. On mettra par exemple, bon c'est une méthode classique, ça veut dire qu'elle n'est pas statique. Afficher attribut, on mettra éditeur. Et bien sûr on va accéder à l'attribut d'une manière statique, donc self.attribut. Bon maintenant je vais supprimer cette ligne. Là vous avez remarqué que cette méthode n'est pas statique, alors pour y accéder il faut instancier la classe. Alors on va créer un objet comme ça. Ensuite on mettra echo obj afficher attribut. Exécutons et on affiche POO. Maintenant on va créer une autre méthode qui permet de modifier la valeur de notre attribut statique. On va lui passer un argument, par exemple la nouvelle valeur. On accédera à notre attribut d'une manière statique, val. Ensuite, on va appeler cette méthode. Et on va passer la nouvelle valeur de poo en PHP. Maintenant on va afficher de nouveau la valeur de notre attribut. On mettra donc ce code. De préférence on mettra un \br avant pour assurer un retour à la ligne. Et ça nous affiche poo en PHP. Jusqu'ici c'est bien. Et maintenant ce que nous allons faire c'est créer un autre objet. Ici, par exemple obj2, et puis on va afficher la valeur de notre attribut statique. On le mettra par exemple ici, toujours avec un echo br, obj2. Pour rappel, nous avons créé l'instance de classe Ob, nous avons affiché la valeur initiale de notre attribut statique qui est poo, Puis nous avons modifié cet attribut. Et puisque l'attribut appartient à la classe, alors cette valeur sera reconnue quelle que soit l'instance de classe que l'on va créer par la suite. D'ailleurs, nous avons créé une autre instance de classe juste après qui s'appelle obj2. Et nous allons essayer maintenant d'afficher la nouvelle valeur de l'attribut. Logiquement, ça devrait afficher POO en PHP et non pas POO parce que cette valeur a été écrasée par la première instance. Exécutons. Et voilà, ça nous affiche POO en PHP. Alors ça nous montre que l'attribut statique n'appartient pas à l'instance mais il appartient à la classe elle-même et toute modification de cet attribut s'appliquera sur tous les objets qui seront instances de cette classe. Ce qu'il faut retenir à la fin, c'est que le fait de déclarer une méthode en tant que statique ou non, même chose pour l'attribut, ça revient à vous, ça veut dire c'est à vous d'estimer si vous avez vraiment besoin d'accéder à cet attribut ou cette méthode via une instance ou bien directement via la classe. Et surtout pour des attributs, si vous avez besoin de conserver la valeur courante de celui-ci quelle que soit l'instance de classe qui sera créée, alors il est préférable que cet attribut-là soit statique. Comme par exemple la valeur d'un compteur de visites qui est normalement une valeur qui est commune à toutes les instances qui seront créées dans le code. Ça sera tout pour cette séance, 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









