Heim  >  Artikel  >  PHP-Framework  >  Eine ausführliche Diskussion darüber, wie man die Kontrollumkehr in Laravel implementiert

Eine ausführliche Diskussion darüber, wie man die Kontrollumkehr in Laravel implementiert

PHPz
PHPzOriginal
2023-04-14 17:20:04665Durchsuche

Laravel ist ein beliebtes PHP-Entwicklungsframework und sein Inversion of Control (IoC)-Container ist eine seiner leistungsstärksten Funktionen.

Inversion of Control gibt Entwicklern mehr Flexibilität bei der Verwaltung des Lebenszyklus und der Abhängigkeiten von Objekten und ermöglicht ihnen den Zugriff auf diese bei Bedarf. In Laravel besteht die Umkehrung des Kontrollcontainers aus Servicecontainer und Fassade.

In diesem Artikel befassen wir uns mit der Implementierung von Inversion of Control in Laravel und erklären, wie Sie damit Objekte und Abhängigkeiten in Ihrer Anwendung verwalten.

Service Container

Service Container ist der Kernbestandteil von Laravel IoC. Es ermöglicht Ihnen, Abhängigkeiten zu registrieren und instanziierte Abhängigkeiten zu erhalten und gleichzeitig deren Lebenszyklus zu verwalten.

In Laravel können wir Abhängigkeiten mit dem Container auf folgende Weise registrieren:

  1. Instanzen binden

Verwenden Sie die Methode $app->instance(), um ein Objekt an den Container zu binden sodass Sie jederzeit darauf zugreifen können. $app->instance()方法将一个对象绑定到容器,以便在需要时随时访问它。

示例:

$app->instance('foo', new Foo);

现在,我们可以通过以下方式从容器中获取foo实例:

$foo = $app->make('foo');
  1. 绑定实现

使用$app->bind()方法将一个类绑定到容器。

示例:

$app->bind('foo', 'Foo');

现在,我们可以通过以下方式从容器中获取foo实例:

$foo = $app->make('foo');

这将返回一个Foo类的新实例。

  1. 绑定单例

使用$app->singleton()方法将一个类绑定到容器,以便每次访问时都返回同一个实例。

示例:

$app->singleton('foo', 'Foo');

现在,我们可以通过以下方式从容器中获取foo实例:

$foo = $app->make('foo');

这将始终返回同一个Foo类实例。

Facade

Facade是Laravel的另一个重要概念,它允许您通过静态语法访问Service Container中的对象。

在Laravel中,Facade使用__callStatic()魔术方法来传递所有方法调用到Service Container,以便从容器中获取实例化的对象,也就是控制反转。

例如,我们可以使用以下方式在Laravel中访问View实例(这是一个Service Container注册过的类):

// 通过Facade语法
return View::make('welcome');

这将自动调用View Facade中的__callStatic()方法,并通过容器返回View实例化对象。

控制反转怎样实际运作?

当从容器中请求实例时,Service Container将检查是否注册了该类或实例,如果已经注册,则直接返回该实例,否则它会尝试自动解析依赖项并实例化所需的对象。

Laravel控制反转容器使用反射(Reflection)来自动解析依赖项。这意味着,如果您将依赖项通过构造函数传递给类,容器将使用反射来自动实例化依赖项,并将它们注入到构造函数中。

示例:

class MyClass {

  protected $foo;

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

}

当您从容器中请求MyClass实例化对象时,容器会自动检测到MyClass需要一个Foo实例,因此自动实例化Foo类并将其注入到MyClass

Beispiel:

rrreee

Jetzt können wir die foo-Instanz aus dem Container abrufen, indem wir:

rrreee

    Binding-Implementierung

    🎜using $ Die App- Die Methode >bind() bindet eine Klasse an den Container. 🎜🎜Beispiel: 🎜rrreee🎜Jetzt können wir die foo-Instanz aus dem Container abrufen über: 🎜rrreee🎜Dadurch wird eine neue Instanz der Foo-Klasse zurückgegeben. 🎜
      🎜Singleton binden🎜🎜🎜Verwenden Sie die Methode $app->singleton(), um eine Klasse an den Container zu binden, sodass jedes Mal dieselbe Klasse zurückgegeben wird Auf eine Instanz wird zugegriffen. 🎜🎜Beispiel: 🎜rrreee🎜Jetzt können wir die foo-Instanz aus dem Container abrufen über: 🎜rrreee🎜Dadurch wird immer dieselbe Foo-Klasseninstanz zurückgegeben. 🎜🎜Facade🎜🎜Facade ist ein weiteres wichtiges Konzept von Laravel, das Ihnen den Zugriff auf Objekte im Service Container über statische Syntax ermöglicht. 🎜🎜In Laravel verwendet Facade die magische Methode __callStatic(), um alle Methodenaufrufe an den Service-Container zu übergeben, um das instanziierte Objekt aus dem Container abzurufen, was eine Umkehrung der Kontrolle darstellt. 🎜🎜Zum Beispiel können wir mit der folgenden Methode auf die View-Instanz (dies ist eine bei Service Container registrierte Klasse) in Laravel zugreifen: 🎜rrreee🎜Dadurch wird automatisch der Viewaufgerufen > Facade __callStatic()-Methode ein und gibt das View instanziierte Objekt über den Container zurück. 🎜🎜Wie funktioniert eigentlich die Umkehrung der Kontrolle? 🎜🎜Beim Anfordern einer Instanz aus dem Container prüft Service Container, ob die Klasse oder Instanz registriert ist, und gibt die Instanz in diesem Fall direkt zurück. Andernfalls wird versucht, Abhängigkeiten automatisch aufzulösen und die erforderlichen Objekte zu instanziieren. 🎜🎜Der Laravel Inversion of Control-Container verwendet Reflection, um Abhängigkeiten automatisch aufzulösen. Das heißt, wenn Sie Abhängigkeiten über einen Konstruktor an eine Klasse übergeben, verwendet der Container Reflektion, um die Abhängigkeiten automatisch zu instanziieren und in den Konstruktor einzufügen. 🎜🎜Beispiel: 🎜rrreee🎜Wenn Sie ein MyClass-Instanziierungsobjekt vom Container anfordern, erkennt der Container automatisch, dass MyClass eine Foo-Instanz erfordert. Dadurch wird die Klasse Foo automatisch instanziiert und in den Konstruktor MyClass eingefügt. 🎜🎜Fazit🎜🎜Der Laravel Inversion of Control-Container ist ein sehr leistungsstarkes Tool, das Entwicklern dabei helfen kann, Objekte und Abhängigkeiten in ihren Anwendungen besser zu verwalten. In diesem Artikel haben wir die Implementierung von Service Container und Facade untersucht und erfahren, wie die Umkehrung der Kontrolle funktioniert. 🎜🎜Ich hoffe, dieser Artikel war hilfreich und hat Ihnen ein besseres Verständnis der Implementierung des Inversion of Control-Containers in Laravel vermittelt. 🎜

Das obige ist der detaillierte Inhalt vonEine ausführliche Diskussion darüber, wie man die Kontrollumkehr in Laravel implementiert. 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