Dependency Injection in PHP

Was bedeutet Dependency Injection?

Bei der Erzeugung von Objekten in einem Objekt kann es schnell zu Abhängigkeiten kommen, die man von Außen dann nicht mehr steuern kann.

Gegeben sei dafür folgende Klasse:

class Car
{
  protected $engine;

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

Dieses Vorgehen zwing mich dazu mit jedem Car-Objekt das ich erzeugt habe immer den Motor vom Typ Engine zu verwenden.

Gebe ich den Montor jedoch per Parameter mit kann ich die Erzeugung von außen steuern. Mit dieser Methodik bin ich nun in der Lage ein beliebiges Objekt vom Typ Engine einzuführen.

class Car
{
  protected $engine;

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

Die ist dann sinnvoll wenn ich die Verwendung von konkreteren Objekten erlauben möchte oder wenn ich mit einen Unittest die konkretere Verwendung beeinflussen möchte. Ob dies nun wie im letzten Beispiel aufgeführt über den Konstruktor vorgenommen wird oder über set-Methoden bleibt der jeweiligen Implementierung und dem Anwendungsfall überlassen.

Mit diesem Vorgehen ist auch das Prinzip der Single-Responsibility gewahrt.

Dependency Injection in einem Satz:

Die Verantwortung Objekte zu erzeugen an höhere Stellen deligieren.

Veröffentlicht von

Sebastian

Als erfahrener Softwarentwickler entwickelt Sebastian in einer Softwareschmiede in Bonn Individualsoftware mit den Schwerpunkten in PHP und MySQL.

Er hat eine pfiffige Frau sowie drei quirlige Söhne, fährt gerne Auto und liebt handwerkliche Arbeiten die im häuslichen Umfeld so anfallen.