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