国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Backend-Entwicklung PHP-Tutorial PHP-OOP-Teilzusammensetzung vs. Vererbungs- und Abh?ngigkeitsinjektion

PHP-OOP-Teilzusammensetzung vs. Vererbungs- und Abh?ngigkeitsinjektion

Jan 05, 2025 am 12:14 AM

PHP OOP Part-Composition vs Inheritance and Dependency Injection

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:

  1. ist ein -> Beziehung. Wenn die Beziehung ?ist ein“ ist, sollten wir die Vererbung verwenden.
  2. 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!

Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was sind einige Best Practices für die Versionierung einer PHP-basierten API? Was sind einige Best Practices für die Versionierung einer PHP-basierten API? Jun 14, 2025 am 12:27 AM

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

Wie implementiere ich Authentifizierung und Autorisierung in PHP? Wie implementiere ich Authentifizierung und Autorisierung in PHP? Jun 20, 2025 am 01:03 AM

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

Was sind die Unterschiede zwischen prozeduralen und objektorientierten Programmierparadigmen in PHP? Was sind die Unterschiede zwischen prozeduralen und objektorientierten Programmierparadigmen in PHP? Jun 14, 2025 am 12:25 AM

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

Was sind schwache Referenzen (Schw?chen) in PHP und wann k?nnten sie nützlich sein? Was sind schwache Referenzen (Schw?chen) in PHP und wann k?nnten sie nützlich sein? Jun 14, 2025 am 12:25 AM

Phpdoesnothaveabuilt-inWeakmapbutoffersWeakreferenceForsimilarFunction.1.WeakreferenceAllowsholdingReferences WithoutPreventingGAGECollection

Wie k?nnen Sie Dateien -Uploads in PHP sicher verarbeiten? Wie k?nnen Sie Dateien -Uploads in PHP sicher verarbeiten? Jun 19, 2025 am 01:05 AM

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.

Wie k?nnen Sie mit NoSQL -Datenbanken (z. B. MongoDB, Redis) von PHP interagieren? Wie k?nnen Sie mit NoSQL -Datenbanken (z. B. MongoDB, Redis) von PHP interagieren? Jun 19, 2025 am 01:07 AM

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.

Was sind die Unterschiede zwischen == (loser Vergleich) und === (strenger Vergleich) in PHP? Was sind die Unterschiede zwischen == (loser Vergleich) und === (strenger Vergleich) in PHP? Jun 19, 2025 am 01:07 AM

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.

Wie führe ich arithmetische Operationen in PHP (, -, *, /, %) aus? Wie führe ich arithmetische Operationen in PHP (, -, *, /, %) aus? Jun 19, 2025 pm 05:13 PM

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.

See all articles