ما با تزریق وابستگی شروع می کنیم؛ زیرا ما را در موضوعات دیگر هم هدایت می کند:
در مهندسی نرم افزار، تزریق وابستگی یک تکنیک است که در آن یک شی با وابستگی یک شی دیگر استفاده می شود.
به کد زیر توجه کنید:
<?php
class Superhero
{
public $name;
public function __construct(string $name)
{
$this->name = $name;
}
}
class ComicBook
{
public $mainCharacter;
public function __construct(Superhero $superhero)
{
$this->mainCharacter = $superhero;
}
}
$superhero = new Superhero('Caffeine Man');
$comic = new ComicBook($superhero);
تزریق وابستگی که در بالا می بینید شیء ComicBook ما بستگی به شیء Superhero ما دارد، بنابراین ما آن را تزریق می کنیم.
اگر ما بخواهیم شخصیتهای مختلف داستان ها را نشان دهیم، می توانیم ابتدا یک اینترفیس از شخصیت درست کنیم و سپس از این اینترفیس، شخصیتهای مختلف مانند خون آشام، قهرمانها، سگ وحشی و ... بسازیم.
<?php
interface CharacterInterface
{
/**
* All classes implementing this interface must provide a getName method.
*/
public function getName() : string;
}
abstract class Character implements CharacterInterface
{
public $name;
public function getName() : string
{
return $this->name;
}
}
class Superhero extends Character
{
public $name;
public function __construct(string $name)
{
$this->name = $name;
}
}
class VampiricDog extends Character
{
public $name;
public function __construct(string $name)
{
$this->name = $name;
}
}
class ComicBook
{
public $mainCharacter;
public function __construct(CharacterInterface $character)
{
$this->mainCharacter = $character;
}
}
$superhero = new Superhero('Caffeine Man');
$superheroComic = new ComicBook($superhero);
var_dump($superheroComic->mainCharacter->getName());
$vampireDog = new VampiricDog('Mr. Fangz');
$vampireComic = new ComicBook($vampireDog);
var_dump($vampireComic->mainCharacter->getName());