Heim > PHP-Framework > Laravel > Hauptteil

So verwenden Sie die Abhängigkeitsinjektion von Laravel

PHPz
Freigeben: 2023-04-23 09:58:52
Original
1068 Leute haben es durchsucht

Abhängigkeitsinjektion ist ein Entwurfsmuster, das die Komplexität des Codes reduzieren und die Wartbarkeit und Testbarkeit des Codes verbessern kann. Es ist eine wesentliche Technologie in der modernen PHP-Anwendungsentwicklung. Laravel ist ein beliebtes PHP-Framework, das über einen Dependency-Injection-Container verfügt, der uns dabei helfen kann, die Erstellung und Freigabe von Objekten besser zu verwalten. In diesem Artikel erfahren Sie, wie Sie die Abhängigkeitsinjektionsfunktion von Laravel verwenden.

1. Was ist Laravel-Abhängigkeitsinjektion?

Abhängigkeitsinjektion ist ein Programmiermuster, das die Abhängigkeiten eines Objekts an andere Objekte weitergeben kann, die es aufrufen, wodurch die Kopplung verringert wird. Bei der objektorientierten Programmierung bestehen Abhängigkeiten zwischen den verschiedenen Teilen, aus denen ein Objekt besteht. Jedes Objekt muss auf Instanzen anderer Objekte angewiesen sein, um ordnungsgemäß zu funktionieren. Der Zweck der Abhängigkeitsinjektion besteht darin, diese Abhängigkeiten vom Objekt zu entkoppeln, sodass die Abhängigkeiten eines Objekts von einem externen Container verwaltet werden.

Für eine PHP-Anwendung ist der Prozess der Abhängigkeitsinjektion im Allgemeinen in die folgenden Schritte unterteilt:

  1. Abhängigkeiten definieren: Definieren Sie andere Objekte oder Werte, von denen jedes Objekt abhängt.
  2. Konfigurieren Sie den Container: Registrieren Sie die erforderlichen Objektinstanzen im Container.
  3. Abhängigkeiten auflösen: Wenn eine Methode eines Objekts aufgerufen werden muss, löst der Container automatisch andere Objektinstanzen auf, von denen er abhängt.

Der Dependency-Injection-Container von Laravel ist ein sehr leistungsfähiges Tool, mit dem sich Abhängigkeitsmanagementprobleme leicht lösen lassen.

2. Die Verwendung der Abhängigkeitsinjektion in Laravel

Werfen wir einen Blick darauf, wie die Abhängigkeitsinjektion in Laravel verwendet wird.

  1. Objektinstanzen registrieren

In Laravel können wir die Bindungsmethode des Containers verwenden, um Objektinstanzen zu registrieren. Beispielsweise möchten wir ein UserService-Objekt registrieren und den folgenden Code im Dienstanbieter hinzufügen:

public function register()
{
    $this->app->bind(UserService::class, function($app) {
        return new UserService($app->make(UserRepository::class));
    });
}
Nach dem Login kopieren
Nach dem Login kopieren

Hier verwenden wir die Bindungsmethode, um den UserService im Container zu registrieren und eine Abschlussfunktion zu definieren, um eine Objektinstanz zu erstellen. In der Abschlussfunktion verwenden wir die Make-Methode des Containers, um das UserRepository-Objekt abzurufen, von dem UserService abhängt.

  1. Abhängigkeitsinjektion verwenden

Nachdem wir das UserService-Objekt im Container registriert haben, wie wird es im Controller verwendet? Es ist ganz einfach, wir müssen lediglich einen UserService-Parameter im Konstruktor des Controllers definieren. Zum Beispiel:

use App\Services\UserService;

class UserController extends Controller
{
    private $user;

    public function __construct(UserService $user)
    {
        $this->user = $user;
    }
}
Nach dem Login kopieren
Nach dem Login kopieren

Hier definieren wir einen UserService-Objektparameter im Konstruktor von UserController. Wir müssen das UserService-Objekt nicht manuell erstellen, Laravel fügt es automatisch in den Konstruktorparameter ein.

  1. Abhängigkeiten automatisch auflösen

Der Abhängigkeitsinjektionscontainer von Laravel kann Abhängigkeiten automatisch auflösen, sodass wir die Abhängigkeitsinjektion einfach verwenden können. Beispielsweise haben wir den folgenden Code beim Dienstanbieter registriert:

public function register()
{
    $this->app->bind(UserService::class, function($app) {
        return new UserService($app->make(UserRepository::class));
    });
}
Nach dem Login kopieren
Nach dem Login kopieren

Dann können wir UserService direkt im Konstruktor von UserController verwenden:

use App\Services\UserService;

class UserController extends Controller
{
    private $user;

    public function __construct(UserService $user)
    {
        $this->user = $user;
    }
}
Nach dem Login kopieren
Nach dem Login kopieren

Wenn wir das UserController-Objekt erstellen, erkennt Laravel automatisch, dass ein UserService-Objekt erforderlich ist, und Anschließend wird automatisch ein UserService-Objekt erstellt und in den UserController eingefügt.

  1. Übergabe von Parametern

Manchmal müssen wir während der Objekterstellung Parameter übergeben. Wenn wir beispielsweise ein UserService-Objekt erstellen, müssen wir ein UserRepository-Objekt übergeben.

Wir können diese Funktion erreichen, indem wir beim Binden des Objekts Parameter übergeben. Zum Beispiel:

public function register()
{
    $this->app->bind(UserService::class, function($app, $parameters) {
        return new UserService($parameters['userRepository']);
    });
}

$userService = app(UserService::class, ['userRepository' => new UserRepository()]);
Nach dem Login kopieren

Dadurch wird ein UserService-Objekt erstellt und ihm ein neues UserRepository-Objekt übergeben.

  1. Geerbte Abhängigkeiten

Manchmal hängen mehrere Klassen von derselben Klasse ab, und wir können Vererbung verwenden, um den Abhängigkeitsinjektionscode zu vereinfachen. Zum Beispiel:

class BaseService
{
    protected $repository;

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

class UserService extends BaseService
{
    public function __construct(UserRepository $userRepository)
    {
        parent::__construct($userRepository);
    }
}
Nach dem Login kopieren

Hier definieren wir eine BaseService-Klasse, um die Abhängigkeiten von BaseRepository-Objekten zu verwalten, und erben die BaseService-Klasse in der UserService-Klasse. Auf diese Weise kann das BaseRepository-Objekt direkt im UserService verwendet werden.

3. Zusammenfassung

Der Abhängigkeitsinjektionscontainer von Laravel ist ein sehr leistungsfähiges Tool, mit dem sich Abhängigkeitsmanagementprobleme leicht lösen lassen. Wenn Sie die Abhängigkeitsinjektion von Laravel verwenden, müssen Sie auf einige Details achten:

  1. Abhängigkeiten definieren: Definieren Sie andere Objekte oder Werte, von denen jedes Objekt abhängt, und registrieren Sie sie mithilfe der Bindungsmethode im Dienstanbieter im Container.
  2. Abhängigkeitsinjektion verwenden: Definieren Sie einen Objektparameter in Controllern und anderen Stellen, an denen Objektinstanzen benötigt werden, und analysiert automatisch Abhängigkeiten und injiziert Objekte während der Ausführung.
  3. Übergabeparameter: Sie können Parameter verwenden, um abhängige Objekte während der Objekterstellung zu übergeben.
  4. Geerbte Abhängigkeiten: Vererbung kann verwendet werden, um den Abhängigkeitsinjektionscode zu vereinfachen.

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

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage