


PHP-OOP-Teilzusammensetzung vs. Vererbungs- und Abhängigkeitsinjektion
In 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

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

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

Undress AI Tool
Ausziehbilder kostenlos

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











PHP ist eine Skriptsprache, die auf der Serverseite weit verbreitet ist und insbesondere für die Webentwicklung geeignet ist. 1.PHP kann HTML einbetten, HTTP -Anforderungen und Antworten verarbeiten und eine Vielzahl von Datenbanken unterstützt. 2.PHP wird verwendet, um dynamische Webinhalte, Prozessformdaten, Zugriffsdatenbanken usw. mit starker Community -Unterstützung und Open -Source -Ressourcen zu generieren. 3. PHP ist eine interpretierte Sprache, und der Ausführungsprozess umfasst lexikalische Analyse, grammatikalische Analyse, Zusammenstellung und Ausführung. 4.PHP kann mit MySQL für erweiterte Anwendungen wie Benutzerregistrierungssysteme kombiniert werden. 5. Beim Debuggen von PHP können Sie Funktionen wie error_reporting () und var_dump () verwenden. 6. Optimieren Sie den PHP-Code, um Caching-Mechanismen zu verwenden, Datenbankabfragen zu optimieren und integrierte Funktionen zu verwenden. 7

In PHP sollten die Funktionen für Passwort_Hash und passwart_verify verwendet werden, um sicheres Passwort -Hashing zu implementieren, und MD5 oder SHA1 sollte nicht verwendet werden. 1) Passwort_hash generiert einen Hash, der Salzwerte enthält, um die Sicherheit zu verbessern. 2) Passwort_Verify prüfen Sie das Passwort und sicherstellen Sie die Sicherheit, indem Sie die Hash -Werte vergleichen. 3) MD5 und SHA1 sind anfällig und fehlen Salzwerte und sind nicht für die Sicherheit der modernen Passwort geeignet.

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

PHP wird in E-Commerce, Content Management Systems und API-Entwicklung häufig verwendet. 1) E-Commerce: Wird für die Einkaufswagenfunktion und Zahlungsabwicklung verwendet. 2) Content -Management -System: Wird für die Erzeugung der dynamischen Inhalte und die Benutzerverwaltung verwendet. 3) API -Entwicklung: Wird für die erholsame API -Entwicklung und die API -Sicherheit verwendet. Durch Leistungsoptimierung und Best Practices werden die Effizienz und Wartbarkeit von PHP -Anwendungen verbessert.

PHP -Typ -Eingabeaufforderungen zur Verbesserung der Codequalität und der Lesbarkeit. 1) Tipps zum Skalartyp: Da Php7.0 in den Funktionsparametern wie int, float usw. angegeben werden dürfen. 3) Eingabeaufforderung für Gewerkschaftstyp: Da Php8.0 in Funktionsparametern oder Rückgabetypen angegeben werden dürfen. 4) Nullierstyp Eingabeaufforderung: Ermöglicht die Einbeziehung von Nullwerten und Handlungsfunktionen, die Nullwerte zurückgeben können.

PHP ist immer noch dynamisch und nimmt immer noch eine wichtige Position im Bereich der modernen Programmierung ein. 1) Einfachheit und leistungsstarke Unterstützung von PHP machen es in der Webentwicklung weit verbreitet. 2) Seine Flexibilität und Stabilität machen es ausstehend bei der Behandlung von Webformularen, Datenbankoperationen und Dateiverarbeitung; 3) PHP entwickelt sich ständig weiter und optimiert, geeignet für Anfänger und erfahrene Entwickler.

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

PHP eignet sich für die Webentwicklung, insbesondere für die schnelle Entwicklung und Verarbeitung dynamischer Inhalte, ist jedoch nicht gut in Anwendungen auf Datenwissenschaft und Unternehmensebene. Im Vergleich zu Python hat PHP mehr Vorteile in der Webentwicklung, ist aber nicht so gut wie Python im Bereich der Datenwissenschaft. Im Vergleich zu Java wird PHP in Anwendungen auf Unternehmensebene schlechter, ist jedoch flexibler in der Webentwicklung. Im Vergleich zu JavaScript ist PHP in der Back-End-Entwicklung präziser, ist jedoch in der Front-End-Entwicklung nicht so gut wie JavaScript.
