Przejdź do głównej zawartości

63. Wzorzec Observer (Event) w PHP — EventDispatcher i decoupling

Wzorzec Observer w PHP

Observer (obserwator) to wzorzec projektowy gdzie obiekt (Subject) powiadamia zarejestrowanych obserwatorów o zmianie stanu. W PHP stosujemy go przez EventDispatcher — klasa emituje zdarzenie, listenery reagują niezależnie. To pozwala dodawać funkcje (logowanie, e-mail, cache clear) bez modyfikacji oryginalnej klasy.

  • WordPress opiera się na hookach (actions/filters) — to Observer
  • Symfony EventDispatcher jest sercem frameworka
  • Observer eliminuje twarde zależności między komponentami
  1. Wyjaśnić problem bez Observer: twarda zależność między klasami
  2. Opisać interfejsy Subject i Observer (SplSubject, SplObserver)
  3. Pokazać przykład EventDispatcher w PHP
  4. Omówić realne zastosowania: logowanie, e-mail po zdarzeniu
  1. Problem bez wzorca: klasa UserService wywołuje MailerService i Logger bezpośrednio
  2. Definicja Observer — Subject (nadawca), Observer (obserwator), Event (zdarzenie)
  3. PHP SplSubject i SplObserver — wbudowane interfejsy
  4. EventDispatcher — ręczna implementacja
  5. Decoupling: dodawanie nowych funkcji bez zmiany klasy UserService
  6. Hooki — Observer w kontekście WordPress i wtyczek
  7. PSR-14 — standardowy interfejs Event Dispatcher

Przykład 1

Klasa bez Observer (twarde zależności) vs z Observer

Przykład 2

EventDispatcher z rejestracją listenera i emit

Przykład 3

Diagram: UserRegistered → [MailListener, LogListener]
  1. Wstęp — problem twardych zależności
  2. Wzorzec Observer — definicja i aktorzy
  3. SplSubject i SplObserver w PHP
  4. EventDispatcher — implementacja
  5. Przykład: UserRegistered event
  6. Hooki w WordPress
  7. PSR-14
  8. Podsumowanie i bibliografia

Zaimplementuj rejestrację użytkownika z eventami!

Napisz UserService::register() który emituje UserRegistered event. Zarejestruj dwa listenery: jeden wysyła e-mail, drugi loguje. To klasyczny przykład.