Przejdź do głównej zawartości

52. Dependency Injection w PHP — czym jest DI i jak implementować

Dependency Injection w PHP

Dependency Injection (wstrzykiwanie zależności) to technika programowania, w której obiekt nie tworzy sam swoich zależności, ale otrzymuje je z zewnątrz. To kluczowy wzorzec dla pisania testowalnego, luźno powiązanego kodu PHP.

  • DI jest fundamentem kontenerów w Symfony i Laravel
  • Kod z DI jest łatwiejszy do testowania (można podstawiać mocki)
  • Rozdziela tworzenie obiektów od ich użycia (zasada Single Responsibility)
  1. Wyjaśnić problem: klasa tworząca swoje zależności (new w konstruktorze)
  2. Pokazać trzy formy DI: przez konstruktor, setter, interfejs
  3. Omówić zalety dla testowania jednostkowego
  4. Pokazać prosty kontener DI
  1. Problem bez DI — new Database() wewnątrz klasy
  2. DI przez konstruktor — przekazywanie obiektu jako parametr
  3. DI przez setter — metoda setLogger(Logger $logger)
  4. Interfejsy jako kontrakty — typowanie interfejsem zamiast klasą
  5. Zalety: testowalność (można przekazać mock)
  6. Prosty kontener DI w PHP (tablica callable)
  7. Porównanie: bez DI vs z DI

Przykład 1

Klasa bez DI (new wewnątrz) vs z DI (przez konstruktor)

Przykład 2

Test jednostkowy z mockiem dzięki DI

Przykład 3

Prosty kontener DI — tablica bind/make
  1. Wstęp — problem twardych zależności
  2. Definicja Dependency Injection
  3. Formy DI: konstruktor, setter, interfejs
  4. Przykłady kodu PHP
  5. Zalety dla testowalności
  6. Prosty kontener DI
  7. Podsumowanie
  8. Bibliografia

Zacznij od problemu

Napisz klasę z twardą zależnością, potem refaktoruj ją do DI. Różnica będzie oczywista w kodzie.