Heim  >  Artikel  >  Backend-Entwicklung  >  In Laravel injiziere ich ein Objekt in die übergeordnete Klasse und möchte dann je nach Unterklasse unterschiedliche Implementierungen dieses Objekts einfügen.

In Laravel injiziere ich ein Objekt in die übergeordnete Klasse und möchte dann je nach Unterklasse unterschiedliche Implementierungen dieses Objekts einfügen.

WBOY
WBOYOriginal
2016-12-01 00:56:21943Durchsuche

Ich injiziere ein Objekt in die übergeordnete Klasse und möchte dann je nach Unterklasse unterschiedliche Implementierungen dieses Objekts injizieren.

Da die übergeordnete Klasse dieses Objekt verwendet, kann ich es nicht in die Unterklasse einfügen, aber ich benötige eine andere Implementierung

Ich kontrolliere den injizierten Code:

In Laravel injiziere ich ein Objekt in die übergeordnete Klasse und möchte dann je nach Unterklasse unterschiedliche Implementierungen dieses Objekts einfügen.

Das Schreiben auf diese Weise funktioniert nicht, da das Objekt in die übergeordnete Klasse eingefügt wird. Die Stelle, an der es in die übergeordnete Klasse eingefügt wird:

In Laravel injiziere ich ein Objekt in die übergeordnete Klasse und möchte dann je nach Unterklasse unterschiedliche Implementierungen dieses Objekts einfügen.

Antwortinhalt:

Ich injiziere ein Objekt in die übergeordnete Klasse und möchte dann je nach Unterklasse unterschiedliche Implementierungen dieses Objekts injizieren.

Da die übergeordnete Klasse dieses Objekt verwendet, kann ich es nicht in die Unterklasse einfügen, aber ich benötige eine andere Implementierung

Ich kontrolliere den injizierten Code:

In Laravel injiziere ich ein Objekt in die übergeordnete Klasse und möchte dann je nach Unterklasse unterschiedliche Implementierungen dieses Objekts einfügen.

Das Schreiben auf diese Weise funktioniert nicht, da das Objekt in die übergeordnete Klasse eingefügt wird. Die Stelle, an der es in die übergeordnete Klasse eingefügt wird:

In Laravel injiziere ich ein Objekt in die übergeordnete Klasse und möchte dann je nach Unterklasse unterschiedliche Implementierungen dieses Objekts einfügen.

Methode 1: Instanzen nicht direkt in die Aktionsmethode der übergeordneten Klasse einfügen. Die übergeordnete Klasse erhält verwandte Instanzen von anderen Methoden, und die Unterklasse überschreibt diese Methode und gibt die von ihr selbst injizierte Instanz zurück. Zum Beispiel:

Elternklasse:

<code class="php">public function update()
{
    $this->validate($this->getRequest(), ...);
}

protected function getRequest()
{
    return app(Request::class);
}</code>

Unterkategorien:

<code class="php">protected function getRequest()
{
    return app(RoleRequest::class);
}</code>

Methode 2: Merkmal verwenden.

Methode 3: In __construct injizieren. Ähnlich wie bei Methode 1 hängt das __construct der übergeordneten Klasse nicht von Parametern ab, und das __construct der Unterklasse hängt nach Belieben davon ab.

Warum ist es so gestaltet?

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