


Dans cette série, je couvrirai les principes fondamentaux de la programmation orientée objet (POO) PHP. Le contenu sera organisé en parties séquentielles, chacune se concentrant sur un sujet spécifique. Si vous êtes débutant ou si vous n'êtes pas familier avec les concepts de POO, cette série est conçue pour vous guider étape par étape. Dans cette partie, je discuterai de la composition par rapport à l'héritage et à l'injection de dépendances en PHP. Commençons ensemble le voyage d’apprentissage de PHP OOP !
Composition vs héritage
Nous avons déjà découvert la relation entre les classes parent et enfant dans la programmation orientée objet, où nous avons vu qu'une classe enfant peut hériter d'une classe parent et accéder à tout à partir de celle-ci. C'est ce qu'on appelle l'héritage.
D'un autre côté, la composition fait référence à l'attribution d'une classe parent comme valeur de propriété dans la classe enfant, plutôt que d'en hériter. Grâce à cela, nous pouvons accéder à tout depuis la classe parent. C'est ce qu'on appelle la composition.
Vous trouverez ci-dessous des exemples illustrant la composition et l'héritage.
Exemple de code
class Link { public string $name; public string $type; public function create($name, $type) { $this->name = $name; $this->type = $type; } public function show() { echo "name: $this->name, type: $this->type"; } } // Inheritance example class ShoLink extends Link { // other functionalities } // Composition example class User { public Link $link; public function __construct() { $this->link = new Link(); } // other functionalities } $user = new User(); $user->link->create("Jamir", "Short");
Dans le premier exemple, nous pouvons voir que la classe ShoLink hérite de la classe Link. En revanche, dans le deuxième exemple, la classe User n'hérite pas de la classe Link. Au lieu de cela, il attribue une instance de la classe Link à l'une de ses propriétés. En conséquence, nous pouvons accéder à tout depuis la classe Link dans les deux classes enfants.
Maintenant, une question peut se poser : si nous pouvons déjà accéder à tout en utilisant l'héritage, pourquoi devrions-nous utiliser la composition ? Après tout, avec la composition, nous devons déclarer une propriété supplémentaire et fixer sa valeur via la construction. Cela semble être un travail supplémentaire : alors quel est l'avantage d'utiliser la composition ?
Eh bien, nous savons que l'héritage rend tout ce qui se trouve dans la classe parent accessible dans la classe enfant. Par conséquent, même si l'on ne souhaite pas utiliser certaines méthodes de la classe parent ou si certaines propriétés ou méthodes de la classe parent ne sont pas nécessaires dans la classe enfant, elles deviennent quand même accessibles dans la classe enfant si elles sont des membres publics ou protégés. .
Pour résoudre ce problème, une composition est utilisée. Avec la composition, nous pouvons rendre accessibles uniquement les parties requises de la classe parent dans la classe enfant. Clarifions cela davantage avec un autre exemple.
Si nous regardons attentivement la classe Link, nous pouvons voir qu'elle possède une méthode show. Grâce à cette méthode, nous pouvons afficher directement le lien créé dans la classe ShoLink.
Cependant, que se passe-t-il si nous voulons que la classe User empêche quiconque de visualiser directement le lien créé pour l'utilisateur ? Au lieu de cela, nous souhaiterions peut-être afficher le lien de l’utilisateur à côté de son profil.
C'est pourquoi, dans la classe User, au lieu d'hériter de la classe Link, nous y accédons via la composition. Par conséquent, personne ne peut visualiser directement le lien de l’utilisateur via la classe User, mais il peut visualiser directement le lien de la classe ShoLink.
Privilégier la composition à l'héritage
Maintenant, nous comprenons un peu la composition et quand l'utiliser à la place de l'héritage pour résoudre certains problèmes. En POO, il existe un principe appelé « Favoriser la composition plutôt que l'héritage », qui signifie donner la priorité à la composition plutôt qu'à l'héritage. En d’autres termes, pour les classes enfants où il n’est pas nécessaire d’accéder à tout depuis la classe parent, il faut toujours préférer la composition à l’héritage.
Maintenant, la question se pose : comment décider quand utiliser la composition et quand utiliser l'héritage ?
Dans ce cas, nous devons fonder notre décision sur deux types de relations :
- est un -> relation. Si la relation est « est un », nous devrions utiliser l'héritage.
- a un -> relation. Si la relation est « a un », nous devrions utiliser la composition.
Exemple de code
class Link { public string $name; public string $type; public function create($name, $type) { $this->name = $name; $this->type = $type; } public function show() { echo "name: $this->name, type: $this->type"; } } // Inheritance example class ShoLink extends Link { // other functionalities } // Composition example class User { public Link $link; public function __construct() { $this->link = new Link(); } // other functionalities } $user = new User(); $user->link->create("Jamir", "Short");
Si vous regardez l'exemple de la classe ShoLink ci-dessus, vous verrez que la classe ShoLink hérite de la classe Link. Donc, si je devais définir une relation entre eux, la relation serait ShoLink est un lien car ShoLink est essentiellement un type de lien.
Exemple de code
// Inheritance example class ShoLink extends Link { // other functionalities }
Maintenant, si nous regardons l'exemple de la classe User ci-dessus, nous pouvons voir que la classe User utilise la composition avec la classe Link. Donc, si je devais définir une relation entre eux, la relation serait : L'utilisateur a un lien car un utilisateur n'est pas un lien, mais un utilisateur peut avoir un lien ou en posséder un.
J'espère que vous avez maintenant une compréhension plus claire de la composition et de l'héritage, y compris quand utiliser chacun d'eux et lequel donner la priorité dans différentes situations.
Injection de dépendance
Avant de comprendre l'injection de dépendances, nous devons d'abord comprendre ce qu'est une dépendance. Une dépendance se produit lorsqu'une classe enfant utilise les membres d'une autre classe, soit par héritage, soit par composition. Dans ce cas, la classe parent devient la dépendance de la classe enfant.
Dans l'exemple ci-dessus, nous avons vu que lorsque nous utilisons la composition au lieu de l'héritage, nous devons déclarer une propriété dans la classe enfant et attribuer l'instance de la classe parent à cette propriété via le constructeur. Par conséquent, si nous voulons utiliser la classe User, nous devons instancier la classe Link dans son constructeur car la classe User est dépendante de la classe Link. En d’autres termes, la classe Link est une dépendance de la classe User. Le problème ici est que le processus d'instanciation de la classe Link est étroitement couplé au sein de la classe User.
Le problème est que l'instanciation de la classe Link est limitée et spécifique à la classe User. Si nous voulons transmettre une autre classe au lieu de la classe Link de l'extérieur dans la classe User, nous ne pouvons pas le faire car nous créons explicitement l'instance de la classe Link dans le constructeur et l'attribuons à la propriété Link. C'est ce qu'on appelle une dépendance étroitement couplée, ce qui signifie que nous ne pouvons pas modifier cette dépendance de l'extérieur.
Cependant, si nous n'instancions pas nous-mêmes la classe Link dans le constructeur et la laissons à l'utilisateur, ce qui signifie que lorsqu'un utilisateur utilise notre classe User, il transmettra la dépendance de la classe Link à la classe User, notre problème sera résolu.
Regardons l'exemple de code ci-dessous.
Exemple de code
class Link { public string $name; public string $type; public function create($name, $type) { $this->name = $name; $this->type = $type; } public function show() { echo "name: $this->name, type: $this->type"; } } // Inheritance example class ShoLink extends Link { // other functionalities } // Composition example class User { public Link $link; public function __construct() { $this->link = new Link(); } // other functionalities } $user = new User(); $user->link->create("Jamir", "Short");
Dans cet exemple, nous pouvons voir qu'au lieu d'instancier la classe Link dans le constructeur de la classe User, nous transmettons la dépendance de la classe Link dans la classe User depuis l'extérieur. Ce processus de transmission de la dépendance dans la classe User via l'utilisateur est appelé injection de dépendance. En d’autres termes, nous injectons ou poussons la dépendance de la classe Link de l’extérieur. C'est ce qu'on appelle une dépendance lâchement couplée, ce qui signifie que nous pouvons facilement modifier cette dépendance de l'extérieur.
Maintenant, si la classe Link a également ses propres dépendances, nous pouvons également y injecter ces dépendances de l'extérieur via la classe User. Ensuite, on peut simplement injecter l’instance de la classe Link dans la classe User. Par conséquent, nous n’avons pas à nous soucier des dépendances de la classe Link au sein de la classe User, car l’utilisateur la gérera de l’extérieur.
Regardons l'exemple de code ci-dessous.
Exemple de code
// Inheritance example class ShoLink extends Link { // other functionalities }
De cette façon, on pourra injecter autant de dépendances que l'on veut depuis l'extérieur, et ce sera beaucoup plus flexible. C'est tout pour aujourd'hui ; nous en parlerons dans la prochaine leçon.
Vous pouvez me contacter sur GitHub et Linkedin.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

PHP est principalement la programmation procédurale, mais prend également en charge la programmation orientée objet (POO); Python prend en charge une variété de paradigmes, y compris la POO, la programmation fonctionnelle et procédurale. PHP convient au développement Web, et Python convient à une variété d'applications telles que l'analyse des données et l'apprentissage automatique.

PHP est originaire en 1994 et a été développé par Rasmuslerdorf. Il a été utilisé à l'origine pour suivre les visiteurs du site Web et a progressivement évolué en un langage de script côté serveur et a été largement utilisé dans le développement Web. Python a été développé par Guidovan Rossum à la fin des années 1980 et a été publié pour la première fois en 1991. Il met l'accent sur la lisibilité et la simplicité du code, et convient à l'informatique scientifique, à l'analyse des données et à d'autres domaines.

PHP convient au développement Web et au prototypage rapide, et Python convient à la science des données et à l'apprentissage automatique. 1.Php est utilisé pour le développement Web dynamique, avec une syntaxe simple et adapté pour un développement rapide. 2. Python a une syntaxe concise, convient à plusieurs champs et a un écosystème de bibliothèque solide.

PHP reste important dans le processus de modernisation car il prend en charge un grand nombre de sites Web et d'applications et d'adapter les besoins de développement via des cadres. 1.Php7 améliore les performances et introduit de nouvelles fonctionnalités. 2. Des cadres modernes tels que Laravel, Symfony et Codeigniter simplifient le développement et améliorent la qualité du code. 3. L'optimisation des performances et les meilleures pratiques améliorent encore l'efficacité de l'application.

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

Le type PHP invite à améliorer la qualité et la lisibilité du code. 1) Conseils de type scalaire: Depuis PHP7.0, les types de données de base sont autorisés à être spécifiés dans les paramètres de fonction, tels que INT, Float, etc. 2) Invite de type de retour: Assurez la cohérence du type de valeur de retour de fonction. 3) Invite de type d'union: Depuis PHP8.0, plusieurs types peuvent être spécifiés dans les paramètres de fonction ou les valeurs de retour. 4) Invite de type nullable: permet d'inclure des valeurs nulles et de gérer les fonctions qui peuvent renvoyer les valeurs nulles.

Dans PHP, utilisez le mot-clé Clone pour créer une copie de l'objet et personnalisez le comportement de clonage via la méthode de magie du clone \ _ \ _. 1. Utilisez le mot-clé Clone pour faire une copie peu profonde, en clonant les propriétés de l'objet mais pas aux propriétés de l'objet. 2. La méthode du clone \ _ \ _ peut copier profondément les objets imbriqués pour éviter les problèmes de copie superficiels. 3. Faites attention pour éviter les références circulaires et les problèmes de performance dans le clonage et optimiser les opérations de clonage pour améliorer l'efficacité.

PHP convient aux systèmes de développement Web et de gestion de contenu, et Python convient aux scripts de science des données, d'apprentissage automatique et d'automatisation. 1.Php fonctionne bien dans la création de sites Web et d'applications rapides et évolutifs et est couramment utilisé dans CMS tel que WordPress. 2. Python a permis de manière remarquable dans les domaines de la science des données et de l'apprentissage automatique, avec des bibliothèques riches telles que Numpy et Tensorflow.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Dreamweaver CS6
Outils de développement Web visuel

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel