Wstrzykiwanie zależności (ang. Dependency Injection) to wzorzec projektowy, który pozwala tworzyć luźne powiązania między klasami. Dzięki temu program staje się bardziej rozszerzalny, elastyczny i można go łatwo testować. Preferowanym sposobem jest wstrzykiwanie zależności poprzez konstruktor.

PRZYKŁAD

W przykładzie napiszemy prosty programik do detekcji języka przeglądarki internetowej z przekierowaniem na odpowiednią wersję strony np: https://example.com/pl

Klasa Browser zawiera funkcję getLang() do pobierania języka przeglądarki ze zmiennej globalnej – $_SERVER[’HTTP_ACCEPT_LANGUAGE’]:

Zmienna $_SERVER[’HTTP_ACCEPT_LANGUAGE’] zwróci np: pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7, a funkcja substr obetnie cały ciąg tekstowy do dwóch znaków, czyli: pl.

Klasa Web, to klasa, do której poprzez konstruktor wstrzykiwana jest instancja obiektu Browser.

Funkcja redirect() służy do przekierowywania na stronę internetową z odpowiednim językiem. Poprzez uchwyt $browser dostajemy się do funkcji getLang() z klasy Browser.

Testujemy program:

Jak widać, do konstruktora klasy Web przekazujemy instancję obiektu klasy Browser.

I to cała filozofia 🙂 Jeden z łatwiejszych wzorców.


Przykład na GitHub →