Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie PHP für die Abhängigkeitsinjektion

So verwenden Sie PHP für die Abhängigkeitsinjektion

PHPz
PHPzOriginal
2023-06-06 22:01:022489Durchsuche

Mit der Entwicklung des Software-Engineerings konzentrieren sich immer mehr Entwickler darauf, Anwendungen zu schreiben, die einfach zu warten und skalierbar sind. Unter diesen ist die Abhängigkeitsinjektion (Dependency Injection) ein sehr wichtiges Muster, das Testbarkeit, Organisierbarkeit und Skalierbarkeit in Anwendungen erreichen kann. Als bekannte Programmiersprache verfügt PHP auch über einen eigenen Abhängigkeitsinjektionscontainer und zugehörige Bibliotheken. Entwickler können diese Tools zur Implementierung der Abhängigkeitsinjektion verwenden. In diesem Artikel wird die Verwendung von PHP für die Abhängigkeitsinjektion vorgestellt.

  1. Was ist Abhängigkeitsinjektion (DI)?

Bevor wir mit der Einführung der Abhängigkeitsinjektion in PHP beginnen, wollen wir zunächst verstehen, was Abhängigkeiten Injektion sind. Abhängigkeitsinjektion ist ein Software-Entwurfsmuster, das es einer Klasse (oder Funktion) ermöglicht, nicht mehr direkt von den benötigten Objekten abhängig zu sein, sondern von außen übergeben zu werden. Dieses Muster macht den Code flexibler und erweiterbarer, da Abhängigkeiten in einen externen Container verschoben werden, der alle Abhängigkeiten enthält, einen sogenannten Abhängigkeitsinjektionscontainer.

Im Abhängigkeitsinjektionsmuster injizieren wir Abhängigkeiten über Konstruktoren oder Setter-Methoden. Diese Abhängigkeiten können andere Objekte, Schnittstelleninstanzen oder Skalarwerte sein. Eine Abhängigkeit kann ein Objekt oder ein einfacher Wert sein, und der Abhängigkeitsinjektionsclient erhält diese Abhängigkeiten, indem er sie als Parameter an den Dienstcontainer übergibt oder sie in Setter-Methoden im Objekt einfügt.

  1. Vorteile der Abhängigkeitsinjektion

Die Verwendung des Abhängigkeitsinjektionsmusters kann viele Vorteile bringen. Hier sind einige der Hauptvorteile:

  • Testbarkeit: Die Abhängigkeitsinjektion kann uns dabei helfen, Unit-Tests einfacher durchzuführen, da wir problemlos neue Mock-Implementierungen oder Mock-Implementierungen für Abhängigkeitsobjekte bereitstellen können.
  • Flexibilität: Abhängigkeiten zwischen Komponenten einer Anwendung sind flexibler, da wir das Verhalten der Anwendung oder Komponenten durch Einfügen von Abhängigkeiten ändern können.
  • Code-Wiederverwendung: Da Abhängigkeiten in Container verschoben werden, können wir Abhängigkeiten in verschiedenen Komponenten wiederverwenden.
  • Klassenentkopplung: Der Abhängigkeitsinjektionsmodus entkoppelt Abhängigkeiten zwischen Klassen. Dies erleichtert die Wartung des Codes und verringert das Risiko einer Codeänderung.
  1. PHP-Abhängigkeitsinjektionscontainer

Bei Verwendung der Abhängigkeitsinjektion in PHP müssen wir einen Abhängigkeitsinjektionscontainer verwenden. Ein Dependency-Injection-Container ist ein Objekt, das uns hilft, Abhängigkeiten zur Laufzeit aufzulösen. Normalerweise besteht ein Abhängigkeitsinjektionscontainer aus zwei Teilen: dem Registrieren von Abhängigkeiten und dem Auflösen von Abhängigkeiten.

Beim Registrieren von Abhängigkeiten werden Klassen oder Schnittstellen im Container registriert, damit sie abgerufen werden können. Wenn eine Klasse oder ein Objekt von anderen Objekten abhängig sein muss, kann sie diese aus dem Container abrufen. Dependency-Injection-Container können Abhängigkeiten auch automatisch auflösen, was bei der Verwendung von Containern erforderlich ist.

Jetzt verwenden wir das PHP League Container-Paket als unseren Abhängigkeitsinjektionscontainer. PHP League Container ist ein leichter Abhängigkeitsinjektionscontainer, der die automatische Abhängigkeitsauflösung und Registrierung externer Klassen unterstützt.

Bitte beachten Sie, dass der folgende Code die Methode zum Registrieren einer Klasse im Container demonstriert:

use LeagueContainerContainer;

$container = new Container;

$container->add('className', 'NamespaceClassName');

Wir verwenden zum Hinzufügen die Methode add() Der Klassenname „className“ wird einer Klasse mit dem vollständig qualifizierten Namen „NamespaceClassName“ zugeordnet. Wenn der Container die Abhängigkeiten bestimmter Klassen auflösen muss, verwendet er die Reflexions-API, um die Parameter der Klasse abzurufen und sie in Instanzen zu rekonstruieren. add() 方法将对类名 'className' 的实例化映射到完全限定的名称为 'NamespaceClassName' 的类。 当容器需要解析某些类的依赖关系时,它将使用反射 API 来获取类的参数并将它们重建成实例。

  1. 依赖注入实例

让我们通过一个简单的示例来了解如何使用依赖注入来注入一个 EmailSender 依赖项。

interface EmailSenderInterface {
    public function sendEmail($to, $message);
}

class EmailSender implements EmailSenderInterface {
    public function sendEmail($to, $message) {
        return mail($to, "An email", $message);
    }
}

class User {
    protected $emailSender;

    public function __construct(EmailSenderInterface $emailSender) {
        $this->emailSender = $emailSender;
    }

    public function sendWelcomeEmail($email) {
        $this->emailSender->sendEmail($email, "Welcome to my site!");
    }
}

在上面的代码中,我们定义了一组类。 EmailSender 类表示一个邮件发送器,而 User 类用来发送欢迎邮件。 User 类需要通 __construct 方法来获取一个 EmailSender 实例,以便发送欢迎邮件。

现在,我们需要将 EmailSender 实例作为依赖注入到 User 类中。

use LeagueContainerContainer;

$container = new Container;

$container->add('EmailSender', 'EmailSender');

$user = $container->get('User', ['EmailSender']);

在上面的代码中,我们注册 EmailSender 类,并在容器中完成实例化。接下来,我们实例化 User 类,并注入 EmailSender

    Beispiel für eine Abhängigkeitsinjektion
    1. Lassen Sie uns ein einfaches Beispiel verwenden, um zu verstehen, wie die Abhängigkeitsinjektion verwendet wird, um eine EmailSender-Abhängigkeit zu injizieren.
    rrreee

    Im obigen Code definieren wir eine Reihe von Klassen. Die Klasse EmailSender stellt einen E-Mail-Absender dar, während die Klasse User zum Versenden von Willkommens-E-Mails verwendet wird. Die User-Klasse muss über die Methode __construct eine EmailSender-Instanz erhalten, um die Willkommens-E-Mail zu senden.

    #🎜🎜#Jetzt müssen wir die EmailSender-Instanz als Abhängigkeit in die Klasse User einfügen. #🎜🎜#rrreee#🎜🎜#Im obigen Code registrieren wir die Klasse EmailSender und schließen die Instanziierung im Container ab. Als Nächstes instanziieren wir die Klasse User und fügen das Objekt EmailSender ein, um die E-Mail zu senden. #🎜🎜##🎜🎜##🎜🎜#Best Practices für die Verwendung der Abhängigkeitsinjektion#🎜🎜##🎜🎜##🎜🎜#Hier sind einige Best Practices für die Verwendung der Abhängigkeitsinjektion: #🎜🎜#
  • Schreiben Sie testbaren Code: Das Einfügen von Abhängigkeiten in Methoden erleichtert deren Steuerung und ermöglicht Unit-Tests.
  • Externe Klassen registrieren: Wenn Sie andere Bibliotheken oder externe Klassen von Drittanbietern verwenden, registrieren Sie diese beim Container, damit sie bei Bedarf in die Klasse eingefügt werden können.
  • Abhängigkeiten reduzieren: Reduzieren Sie die Anzahl der Abhängigkeiten so weit wie möglich, wodurch der Code präziser und einfacher zu warten ist.
  • Zirkuläre Abhängigkeiten vermeiden: Die Vermeidung zirkulärer Abhängigkeiten kann sehr wichtig sein. Dies kann mithilfe der Setter-Methode gelöst werden. Der Container löst zirkuläre Abhängigkeiten nicht automatisch auf.
  1. Fazit

Abhängigkeitsinjektion ist ein nützliches Muster, das die Verwaltung und Wartung Ihres Codes erleichtert. Die Verwendung der Abhängigkeitsinjektion in PHP bedeutet normalerweise die Verwendung eines Abhängigkeitsinjektionscontainers. Es wird empfohlen, den PHP League Container für die Entwicklung zu verwenden. Wir haben anhand von Beispielcode gezeigt, wie man eine Klasse registriert und Abhängigkeiten einfügt. Durch die Verwendung der Abhängigkeitsinjektion wird Ihre Anwendung effizienter, einfacher zu warten und einfacher zu erweitern.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie PHP für die Abhängigkeitsinjektion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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