Kiedy wdrożyć i rozszerzyć?
- Kiedy należy stosować
implement
LUBextend
? - jakie są prawdziwe przykłady?
Czy to prawda?
Implementacja wydaje się być sposobem na wymuszenie istnienia pewnych metod w klasie i poprawnego sformatowania tych metod. Implementacja czy nie jest sposobem przekazywania zmiennych lub "ustawień" do klasy?
oczekiwany scenariusz realny: mam platformę e-commerce z wiele klas płatności, wszystkie według tego samego wzoru. Kiedy należy dodać nową klasę płatności, bardzo łatwo jest postępować zgodnie ze zdefiniowanym wzorem interface
, aby upewnić się, że wszystkie bity i kawałki są tam od początku.
Rozszerzanie klas sprawia, że rozszerzone (dziecko?) klasa dziedziczy wszystko od swojej macierzystej klasy z wyjątkiem metod i zmiennych zadeklarowanych jako private
?
przewidywany scenariusz realny: mam jedną klasę o nazwie sessions
z dwoma klasami dla dzieci nazwane sessioncookies
i databasesessions
. sessioncookies
i databasesessions
, razem dziedziczą wiele wzajemnych opcji konfiguracji z sesji macierzystych, co ułatwia zmianę opcji konfiguracji, aby wpłynąć na wszelkiego rodzaju przechowywanie danych odwiedzających.
1 answers
Dziedziczenie jest przydatne, aby zmniejszyć ilość kodu, który przepisujesz. Jeśli masz kilka klas z kilkoma typowymi metodami lub polami, zamiast definiować te metody i pola w kółko, możesz włączyć je do klasy bazowej i kazać każdej z klas potomnych rozszerzyć tę klasę bazową.
Interfejsy (i implements
) są przydatne, gdy chcesz zdefiniować wspólny protokół dla zachowania grupy obiektów. Na przykład, możesz zlecić, aby obiekty, które są porównywalne można porównać dla równości i hashed, itp.
Użycie dziedziczenia jest ostatecznie wyborem projektu. Zwróć uwagę na przypadki, w których definiujesz te same metody w kilku klasach; są to doskonałe przypadki, w których możesz włączyć te metody do klasy bazowej. To samo dotyczy klas, które obserwują niektóre z tych samych cech: możesz zagwarantować spójność, umieszczając te cechy w interfejsie, który ma być zaimplementowany przez te powiązane klasy.
Dziedziczenie jest dużym pojęciem w OOP, które wykracza daleko poza tylko PHP. Polecam przeczytać artykuł na Wikipedii o dziedziczeniu i być może wzorcach projektowych przez Gang czterech.
Wierzę, że Twoje zrozumienie dziedziczenia jest głównie poprawne. Następnym krokiem byłoby wykorzystanie go w produkcji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-10 19:57:07