Heim  >  Artikel  >  Backend-Entwicklung  >  Erfahren Sie in einem Artikel mehr über die DI-Abhängigkeitsinjektion in PHP

Erfahren Sie in einem Artikel mehr über die DI-Abhängigkeitsinjektion in PHP

王林
王林nach vorne
2024-04-03 13:46:04401Durchsuche

Erfahren Sie in einem Artikel mehr über die DI-Abhängigkeitsinjektion in PHP

Der PHP-Editor Baicao führt Sie in die Materie Dependency Injection (DI) ein. Dependency Injection ist ein Software-Designmuster, das zur Verbesserung der Flexibilität und Wartbarkeit von Code beiträgt. In diesem Artikel werden die Konzepte, Prinzipien und praktischen Anwendungen von DI in PHP ausführlich vorgestellt und Ihnen dabei geholfen, die Abhängigkeitsinjektionstechnologie besser zu verstehen und anzuwenden.

Der Grund, warum eine Abhängigkeitsinjektion auftritt

Wenn keine Abhängigkeitsinjektion verwendet wird,

PHP

Wenn Sie eine Klasse in einer anderen Klasse verwenden müssen, führen Sie häufig die folgenden Vorgänge aus

Wenn ich beispielsweise die Adapterklasse in der Containerklasse verwenden muss, muss ich sie vor der Verwendung instanziieren

Wenn eine große Anzahl externer Klassen verwendet werden muss, führt dies zu einem zu hohen Kopplungsgrad, was leicht zu späteren Wartungsschwierigkeiten führen kann

Laienhaft ausgedrückt bedeutet dies, dass der Container ohne externe Klassen nicht funktionieren kann. Dies wird als zu hohe Kopplung bezeichnet

<?php
class container
{
private $adapter;

public function __construct()
{
$this->adapter = new adapter();
}
}

Der PHP-Editor Baicao führt Sie in die Materie Dependency Injection (DI) ein. Dependency Injection ist ein Software-Designmuster, das zur Verbesserung der Flexibilität und Wartbarkeit von Code beiträgt. In diesem Artikel werden die Konzepte, Prinzipien und praktischen Anwendungen von DI in PHP ausführlich vorgestellt und Ihnen dabei geholfen, die Abhängigkeitsinjektionstechnologie besser zu verstehen und anzuwenden. Einfache Abhängigkeitsinjektion

Der obige Code ist zu stark gekoppelt, was zur Entstehung einer Abhängigkeitsinjektion führt, hauptsächlich zur Entkopplung Im folgenden Fall müssen wir nur das Klassenobjekt übergeben, das bedient werden muss

Die Parameter des Abhängigkeitsinjektionsvorgangs sind Objekte anstelle gewöhnlicher Parameter. Haben Sie ein besseres Verständnis?

Aber eine so einfache Abhängigkeitsinjektion führt dazu, dass die Übergabe von Parametern lange dauert, wenn Sie von vielen Klassen abhängig sind, und dass es leicht zu Verwirrung kommt

<?php
class container
{
private $adapter;

public function __construct(adapter $adapter)
{
$this->adapter = $adapter;
}
}
Der PHP-Editor Baicao führt Sie in die Materie Dependency Injection (DI) ein. Dependency Injection ist ein Software-Designmuster, das zur Verbesserung der Flexibilität und Wartbarkeit von Code beiträgt. In diesem Artikel werden die Konzepte, Prinzipien und praktischen Anwendungen von DI in PHP ausführlich vorgestellt und Ihnen dabei geholfen, die Abhängigkeitsinjektionstechnologie besser zu verstehen und anzuwenden.

Abhängigkeitsinjektion auf hohem Niveau

Um das oben genannte Problem der Parameterverwirrung zu lösen, wurde die Abhängigkeitsinjektion zu diesem Zeitpunkt optimiert

Verwenden Sie die magische Methode, um das Objekt festzulegen

Zu diesem Zeitpunkt können wir das Problem zu vieler Abhängigkeiten und verwirrender Parameter lösen

<?php
class container
{
public $instance = [];

public function __set($name, $value)
{
$this->instance[$name] = $value;
}
}

$container = new container();

$container->adapter = new adapter();
$container->autofelix = new autofelix();

Der PHP-Editor Baicao führt Sie in die Materie Dependency Injection (DI) ein. Dependency Injection ist ein Software-Designmuster, das zur Verbesserung der Flexibilität und Wartbarkeit des Codes beiträgt. In diesem Artikel werden das Konzept, das Prinzip und die praktische Anwendung von DI in PHP ausführlich vorgestellt, um Ihnen zu helfen, die Abhängigkeitsinjektionstechnologie besser zu verstehen und anzuwenden.
Abhängigkeitsinjektionsanwendung

Wir definieren zunächst eine

Containerklasse, die hauptsächlich dazu verwendet wird, die Klasse, die Sie betreiben möchten, in den Container einzufügen

Bei Verwendung müssen Sie nur das Containerobjekt übergeben

<?php
class container
{
public $instance = [];

public function __set($name, $value)
{
$this->instance[$name] = $value;
}
}

class adapter
{
public $name = '我是调度器';
}

$container = new container();
$container->adapter = new adapter();

class autofelix
{
private $container;

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

public function who($class)
{
return $this->container->instance[$class]->name;
}
}

$autofelix = new autofelix($container);

$who = $autofelix->who('adapter');

var_dump($who); //我是调度器

Der PHP-Editor Baicao führt Sie in die Materie Dependency Injection (DI) ein. Dependency Injection ist ein Software-Designmuster, das zur Verbesserung der Flexibilität und Wartbarkeit des Codes beiträgt. In diesem Artikel werden das Konzept, das Prinzip und die praktische Anwendung von DI in PHP ausführlich vorgestellt, um Ihnen zu helfen, die Abhängigkeitsinjektionstechnologie besser zu verstehen und anzuwenden.

Optimierung der Abhängigkeitsinjektion auf hohem Niveau
In der obigen Anwendung injizieren wir das instanziierte Objekt direkt in den Container

Dadurch werden alle Objekte instanziiert, bevor sie verwendet werden, was zu einem Ressourcenverbrauch führt

Wir können den Abschluss übergeben, sodass das Objekt nicht instanziiert und injiziert wird. Wenn Sie es verwenden müssen, instanziieren Sie es, was den Verbrauch von

Serverressourcen reduzieren kann

<?php
$container = new container();
$container->adapter = new adapter();

//高阶优化
$container = new container();
$container->adapter = function () {
return new adapter();
};

Das obige ist der detaillierte Inhalt vonErfahren Sie in einem Artikel mehr über die DI-Abhängigkeitsinjektion in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:lsjlt.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen