


PHP-OOP-Teilzusammensetzung vs. Vererbungs- und Abh?ngigkeitsinjektion
Jan 05, 2025 am 12:14 AMIn dieser Serie werde ich die Grundlagen der objektorientierten PHP-Programmierung (OOP) behandeln. Der Inhalt wird in aufeinanderfolgende Teile gegliedert, die sich jeweils auf ein bestimmtes Thema konzentrieren. Wenn Sie ein Anf?nger sind oder mit OOP-Konzepten nicht vertraut sind, soll diese Serie Sie Schritt für Schritt anleiten. In diesem Teil werde ich über die Komposition vs. Vererbung und Abh?ngigkeitsinjektion in PHP diskutieren. Beginnen wir gemeinsam die Reise zum Erlernen von PHP OOP!
Zusammensetzung vs. Vererbung
Wir haben bereits etwas über die Beziehung zwischen übergeordneten und untergeordneten Klassen in der objektorientierten Programmierung gelernt, wo wir gesehen haben, dass eine untergeordnete Klasse eine übergeordnete Klasse erben und auf alles von dieser aus zugreifen kann. Dies wird als Vererbung bezeichnet.
Auf der anderen Seite bezieht sich Komposition auf die Zuweisung einer übergeordneten Klasse als Eigenschaftswert in der untergeordneten Klasse, anstatt sie zu erben. Dadurch k?nnen wir von der übergeordneten Klasse aus auf alles zugreifen. Dies wird als Komposition bezeichnet.
Unten finden Sie Beispiele, die Zusammensetzung und Vererbung veranschaulichen.
Codebeispiel
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");
Im ersten Beispiel k?nnen wir sehen, dass die ShoLink-Klasse die Link-Klasse erbt. Im zweiten Beispiel hingegen erbt die User-Klasse nicht die Link-Klasse. Stattdessen weist es einer seiner Eigenschaften eine Instanz der Link-Klasse zu. Dadurch k?nnen wir in beiden untergeordneten Klassen auf alles aus der Link-Klasse zugreifen.
Nun k?nnte sich die Frage stellen: Wenn wir bereits über die Vererbung auf alles zugreifen k?nnen, warum sollten wir dann Komposition verwenden? Schlie?lich müssen wir bei der Komposition eine zus?tzliche Eigenschaft deklarieren und deren Wert durch die Konstruktion festlegen. Das scheint zus?tzliche Arbeit zu sein – welchen Vorteil hat die Verwendung von Kompositionen?
Nun, wir wissen, dass durch Vererbung alles in der übergeordneten Klasse in der untergeordneten Klasse zug?nglich gemacht wird. Selbst wenn wir daher bestimmte Methoden der übergeordneten Klasse nicht verwenden m?chten oder einige Eigenschaften oder Methoden der übergeordneten Klasse in der untergeordneten Klasse nicht ben?tigt werden, sind sie dennoch in der untergeordneten Klasse zug?nglich, wenn sie ?ffentliche oder geschützte Mitglieder sind .
Um dieses Problem zu l?sen, wird Komposition verwendet. Mit der Komposition k?nnen wir in der untergeordneten Klasse nur die erforderlichen Teile der übergeordneten Klasse zug?nglich machen. Lassen Sie uns dies anhand eines anderen Beispiels weiter verdeutlichen.
Wenn wir uns die Link-Klasse genau ansehen, k?nnen wir sehen, dass sie eine Show-Methode hat. Mit dieser Methode k?nnen wir den in der ShoLink-Klasse erstellten Link direkt anzeigen.
Was aber, wenn wir m?chten, dass die User-Klasse verhindert, dass jemand den für den Benutzer erstellten Link direkt anzeigt? Stattdessen m?chten wir m?glicherweise den Link des Benutzers neben seinem Profil anzeigen.
Aus diesem Grund greifen wir in der User-Klasse nicht auf die Link-Klasse, sondern über die Komposition zu. Daher kann niemand den Link des Benutzers direkt über die User-Klasse anzeigen, wohl aber den Link der ShoLink-Klasse.
Bevorzugen Sie die Zusammensetzung gegenüber der Vererbung
Jetzt haben wir ein gewisses Verst?ndnis für die Zusammensetzung und wissen, wann wir sie anstelle der Vererbung verwenden sollten, um bestimmte Probleme zu l?sen. In OOP gibt es ein Prinzip namens ?Komposition gegenüber Vererbung bevorzugen“, was bedeutet, dass der Komposition Vorrang vor der Vererbung einger?umt wird. Mit anderen Worten, für untergeordnete Klassen, bei denen es nicht notwendig ist, auf alles von der übergeordneten Klasse aus zuzugreifen, sollten wir immer die Komposition der Vererbung vorziehen.
Nun stellt sich die Frage: Wie entscheiden wir, wann wir Komposition und wann Vererbung verwenden?
In diesem Fall müssen wir unsere Entscheidung auf zwei Arten von Beziehungen stützen:
- ist ein -> Beziehung. Wenn die Beziehung ?ist ein“ ist, sollten wir die Vererbung verwenden.
- hat ein -> Beziehung. Wenn die Beziehung ?hat ein“ lautet, sollten wir Komposition verwenden.
Codebeispiel
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");
Wenn Sie sich das Beispiel der ShoLink-Klasse oben ansehen, werden Sie sehen, dass die ShoLink-Klasse von der Link-Klasse erbt. Wenn ich also eine Beziehung zwischen ihnen definieren würde, w?re die Beziehung ?ShoLink ist ein Link“, da ShoLink im Wesentlichen eine Art Link ist.
Codebeispiel
// Inheritance example class ShoLink extends Link { // other functionalities }
Wenn wir uns nun das Beispiel der User-Klasse oben ansehen, k?nnen wir sehen, dass die User-Klasse Komposition mit der Link-Klasse verwendet. Wenn ich also eine Beziehung zwischen ihnen definieren würde, w?re die Beziehung ?Benutzer hat einen Link“, weil ein Benutzer kein Link ist, aber ein Benutzer kann einen Link haben oder einen besitzen.
Ich hoffe, Sie haben jetzt ein klareres Verst?ndnis von Zusammensetzung und Vererbung, einschlie?lich der Frage, wann Sie die einzelnen Elemente verwenden und welche in verschiedenen Situationen priorisiert werden sollten.
Abh?ngigkeitsinjektion
Bevor wir die Abh?ngigkeitsinjektion verstehen, müssen wir zun?chst verstehen, was eine Abh?ngigkeit ist. Eine Abh?ngigkeit liegt vor, wenn eine untergeordnete Klasse die Mitglieder einer anderen Klasse verwendet, entweder durch Vererbung oder Zusammensetzung. In diesem Fall wird die übergeordnete Klasse zur Abh?ngigkeit der untergeordneten Klasse.
Im obigen Beispiel haben wir gesehen, dass wir, wenn wir Komposition statt Vererbung verwenden, eine Eigenschaft in der untergeordneten Klasse deklarieren und dieser Eigenschaft über den Konstruktor die Instanz der übergeordneten Klasse zuweisen müssen. Wenn wir daher die User-Klasse verwenden m?chten, müssen wir die Link-Klasse in ihrem Konstruktor instanziieren, da die User-Klasse von der Link-Klasse abh?ngig ist. Mit anderen Worten: Die Link-Klasse ist eine Abh?ngigkeit von der User-Klasse. Das Problem hierbei ist, dass der Instanziierungsprozess der Link-Klasse eng mit der User-Klasse verknüpft ist.
Das Problem besteht darin, dass die Instanziierung der Link-Klasse begrenzt und spezifisch für die Benutzerklasse ist. Wenn wir anstelle der Link-Klasse eine andere Klasse von au?en an die User-Klasse übergeben m?chten, k?nnen wir das nicht tun, da wir explizit die Instanz der Link-Klasse im Konstruktor erstellen und sie der Link-Eigenschaft zuweisen. Dies wird als eng gekoppelte Abh?ngigkeit bezeichnet, was bedeutet, dass wir diese Abh?ngigkeit nicht von au?en ?ndern k?nnen.
Wenn wir jedoch die Link-Klasse nicht selbst im Konstruktor instanziieren und sie stattdessen dem Benutzer überlassen, was bedeutet, dass ein Benutzer, wenn er unsere Benutzerklasse verwendet, die Link-Klassenabh?ngigkeit an die Benutzerklasse weitergibt, wird unser Problem sein gel?st.
Sehen wir uns das Codebeispiel unten an.
Codebeispiel
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");
In diesem Beispiel k?nnen wir sehen, dass wir, anstatt die Link-Klasse im Konstruktor der User-Klasse zu instanziieren, die Abh?ngigkeit der Link-Klasse von au?en an die User-Klasse übergeben. Dieser Prozess der übergabe der Abh?ngigkeit an die Benutzerklasse über den Benutzer wird als Abh?ngigkeitsinjektion bezeichnet. Mit anderen Worten: Wir injizieren oder pushen die Abh?ngigkeit der Link-Klasse von au?en. Dies wird als lose gekoppelte Abh?ngigkeit bezeichnet, was bedeutet, dass wir diese Abh?ngigkeit leicht von au?en ?ndern k?nnen.
Wenn die Link-Klasse nun auch ihre eigenen Abh?ngigkeiten hat, k?nnen wir diese Abh?ngigkeiten auch von au?en über die User-Klasse in sie einfügen. Dann k?nnen wir einfach die Instanz der Link-Klasse in die User-Klasse einfügen. Daher müssen wir uns nicht um die Abh?ngigkeiten der Link-Klasse innerhalb der User-Klasse kümmern, da der Benutzer dies von au?en handhabt.
Sehen wir uns das Codebeispiel unten an.
Codebeispiel
// Inheritance example class ShoLink extends Link { // other functionalities }
Auf diese Weise k?nnen wir so viele Abh?ngigkeiten von au?en einfügen, wie wir m?chten, und es wird viel flexibler. Das ist alles für heute; wir reden in der n?chsten Lektion.
Sie k?nnen sich mit mir auf GitHub und Linkedin verbinden.
Das obige ist der detaillierte Inhalt vonPHP-OOP-Teilzusammensetzung vs. Vererbungs- und Abh?ngigkeitsinjektion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

ToversionAPHP-basiertApieffektiv, useUrl-basiertversionsforclarityAndaseFrouting, separateversionedCodetoAvoidConflicts, DeprecateoldversionswithClearcommunication, und considercustomheadsonlywaNno.

TosecurelyHandleAuthenticationAuthorizationInphp, folge theSteps: 1.Alwayshashpasswordswithpassword_hash () und password_verify (), usePreeParedStatementStopreventsQlinjapitca und StoreuserDatain $ _SessionArtelogin.2.ImplementscaChescescesc

ProzeduralandObject-orientedProgramming (OOP) inPhpdifferS sisideftribitionInstructure, Wiederverwendbarkeit und datahandling.1.ProceduralProgrammingusSfunctions-organisierte Folgesequentiell, optableForsmallscripts.

Phpdoesnothaveabuilt-inWeakmapbutoffersWeakreferenceForsimilarFunction.1.WeakreferenceAllowsholdingReferences WithoutPreventingGAGECollection

Um Datei -Uploads in PHP sicher zu verarbeiten, besteht der Kern darin, Dateitypen zu überprüfen, Dateien umzubenennen und die Berechtigungen zu beschr?nken. 1. Verwenden Sie Finfo_File (), um den realen MIME -Typ zu überprüfen, und nur bestimmte Typen wie Bild/JPEG sind zul?ssig. 2. Verwenden Sie Uniqid (), um zuf?llige Dateinamen zu generieren und sie im Root-Verzeichnis ohne Web zu speichern. 3.. Begrenzen Sie die Dateigr??e durch Php.ini- und HTML -Formulare und setzen Sie die Verzeichnisberechtigungen auf 0755; 4. Verwenden Sie Clamav, um Malware zu scannen, um die Sicherheit zu verbessern. Diese Schritte verhindern effektiv Sicherheitslücken und stellen sicher, dass der Upload -Prozess des Datei -Uploads sicher und zuverl?ssig ist.

Ja, PHP kann mit NoSQL -Datenbanken wie MongoDB und Redis durch bestimmte Erweiterungen oder Bibliotheken interagieren. Verwenden Sie zun?chst den MongoDBPHP -Treiber (installiert über PECL oder Composer), um Client -Instanzen zu erstellen und Datenbanken und Sammlungen zu betreiben, wobei Sie Insertion, Abfrage, Aggregation und andere Vorg?nge unterstützen. Zweitens verwenden Sie die Predis Library oder PHPREDIS-Erweiterung, um eine Verbindung zu Redis herzustellen, Schlüsselwerteinstellungen und -akquisitionen durchzuführen und PHPREDIS für Hochleistungsszenarien zu empfehlen, w?hrend Predis für die schnelle Bereitstellung bequem ist. Beide sind für Produktionsumgebungen geeignet und gut dokumentiert.

In PHP ist der Hauptunterschied zwischen == und == die Strenge der Typprüfung. == Die Konvertierung des Typs wird vor dem Vergleich durchgeführt, beispielsweise 5 == "5" gibt true zurück und === fordert an, dass der Wert und der Typ gleich sind, bevor True zurückgegeben wird, z. B. 5 === "5" gibt false zurück. In den Nutzungsszenarien ist === sicherer und sollte zuerst verwendet werden, und == wird nur verwendet, wenn die Typumwandlung erforderlich ist.

Die Methoden zur Verwendung grundlegender mathematischer Operationen in PHP sind wie folgt: 1. Additionszeichen unterstützen Ganzfaktoren und Floating-Punkt-Zahlen und k?nnen auch für Variablen verwendet werden. String -Nummern werden automatisch konvertiert, aber nicht für Abh?ngigkeiten empfohlen. 2. Subtraktionszeichen verwenden - Zeichen, Variablen sind gleich, und die Typumwandlung ist ebenfalls anwendbar. 3. Multiplikationszeichen verwenden * Zeichen, die für Zahlen und ?hnliche Zeichenfolgen geeignet sind; 4. Division verwendet / Zeichen, die vermeiden müssen, durch Null zu dividieren, und beachten Sie, dass das Ergebnis m?glicherweise schwimmende Punktzahlen sein kann. 5. Die Modulzeichen k?nnen verwendet werden, um ungerade und sogar Zahlen zu beurteilen, und wenn negative Zahlen verarbeitet werden, stimmen die Restzeichen mit der Dividende überein. Der Schlüssel zur korrekten Verwendung dieser Operatoren liegt darin, sicherzustellen, dass die Datentypen klar sind und die Grenzsituation gut behandelt wird.
