Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] OOP Przysłonienie metody.
Fred1485
post 31.12.2015, 16:25:33
Post #1





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


Witam,

Próbuję rozwiązać problem, cały dzień myślę i nie mogę wymyślić.

Chcę napisać prosty system logowania oparty o obserwatorów (w oparciu o SPL).

Mam przykładowo klasę Subject.

  1. abstract class Subject implements \SplSubject
  2. {
  3. //operacje wspólne dla wszystkich klas dziedziczących
  4. public function attach (SplObserver $observer)
  5. {
  6. //
  7. }
  8.  
  9. public function detach (SplObserver $observer)
  10. {
  11. //
  12. }
  13.  
  14. public function notify ()
  15. {
  16. //
  17. }
  18. }


I klasę logowania dziedziczącą po subject.

  1. class Login extends Subject
  2. {
  3. // autoryzacja etc.
  4. }


Dalej mam klasę obserwatora, ale chcę współpracować tylko z typem LoginObserver więc tworzę abstrakcyjną klasę.

  1. abstract class LoginObserver implements SplObserver
  2. {
  3. //operacje wspólne dla wszystkich klas potomnych
  4.  
  5. public function update (SplSubject $subject)
  6. {
  7. // TODO: Implement update() method.
  8. }
  9. }


I przykładową klasę.

  1. class SendEmail extends LoginObserver
  2. {
  3. // wysyłanie email czy tam czegoś dla przykładu
  4. }


I teraz sedno sprawy, klasa Login ma współpracować tylko z obserwatorami typu LoginObserver stąd w klasie Login warto by nadpisać metodę attach i zmienić rzutowanie na LoginObserver, oczywiście taki sposób nie działa, bo w interfejsie jest rzutowanie na SplObserver. Jednak nie chciałbym tworzyć kolejnych metod i "zaśmiecać". Nie wiem czy jest jakieś wyjście z tej sytuacji. Nie mogę sobie wyobrazić jak to zrobić.


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 30.05.2024 - 22:51