Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kiedy używać dziedziczenia ?
Damiankossek
post
Post #1





Grupa: Zarejestrowani
Postów: 118
Pomógł: 8
Dołączył: 10.12.2009

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


Witam, tak jak w temacie ... Wszedłem w świat OOP jakiś czas temu, teraz robię strony na Kohanie (IMG:style_emoticons/default/smile.gif) Bardzo przypadła mi do gustu ... Możecie powiedzieć mi kiedy używać dziedziczenia ? Wiem że jest to `jakby` rozdrabnianie klas ... Lecz nigdy nie mogłem znależć praktycznego zastosowania dziedziczenia w swoich skryptach (IMG:style_emoticons/default/smile.gif) Prosiłbym kogoś o takie szybkie i łopatologiczne rozpisanie jakiegoś skryptu np. newsów, artykułów czy czego kolwiek (byle nie zwierząt (IMG:style_emoticons/default/tongue.gif) ) ... Nie mówię że ma być kod tylko jak to ma wyglądać w praktyce, w formie jakiegoś drzewka lub czego kolwiek (IMG:style_emoticons/default/smile.gif)

No i jeszcze jedno .. Jak dziedziczyć w Kohanie ? Bo widzę że moje wszystkie modele i kontrolery już dziedziczą klasy wyznaczone przez Kohane (IMG:style_emoticons/default/smile.gif) _Models i _Controllers ... Da się jeszcze podpiąć coś czy nie bardzo (IMG:style_emoticons/default/smile.gif) ?

Przepraszam jeżeli są to jakieś durne pytania, ale niepotrafie zastosować tego w praktyce (IMG:style_emoticons/default/smile.gif)

Pozdrawiam

Ten post edytował Damiankossek 24.03.2010, 14:50:44
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
230005
post
Post #2





Grupa: Zarejestrowani
Postów: 316
Pomógł: 36
Dołączył: 2.04.2008

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


Tak jak kolega wyżej napisał, albo możesz sobie spojrzeć np. w manual php na klasy DOMNode i przyległe. Np. DOMDocument po niej dziedziczy - DOMNode zapewnia jakąś podstawową funkcjonalność wspólną dla każdego swojego potomka, a potomkowie dodają coś od siebie, bo np. nie było sensu żeby dana metoda znalazła się wyżej w hierarchii (w tym przypadku w klasie DOMNode), bo jest specyficzne tylko dla nich. W ten sposób każdy stworzony obiekt posiada tylko to co jest mu niezbędne. Dla programisty natomiast łatwiej jest zapamiętać że potrzebna mu metoda znajduje się np w klasie DOMElement, niż szukać jej w gąszczu metod DOMNode.

Oczywiście nie musisz wcale używać dziedziczenia, ale bardzo ułatwia ono ponowne użycie kodu. Na przykładzie obsługi plików:

  1.  
  2. class File {
  3. protected $_name;
  4. protected $_size;
  5. protected $_type;
  6.  
  7. public function __construct() {
  8. //tu następuje zainicjowanie pól klasy odpowiednimi wartościami
  9. }
  10.  
  11. public function create() {
  12.  
  13. }
  14.  
  15. public function remove() {
  16.  
  17. }
  18. }
  19.  


Dysponujesz klasą, która posiada podstawową funkcjonalność wspólną dla każdego pliku. Teraz powiedzmy że chciałbyś do swojego skryptu, w którym używasz tej klasy dodać pewną specyficzną funkcjonalność, np. dla obrazków i plików tekstowych. Masz dla wyjścia - albo przerobić (dodać) kod klasy file i zmienić jej nazwę (dwukrotnie), albo dziedziczyć:

  1.  
  2. class Image extends File {
  3. public function __construct() {
  4. parent::__construct();
  5. }
  6.  
  7. public function crop() {
  8. }
  9.  
  10. public function scale() {
  11. }
  12.  
  13. public function round() {
  14. }
  15. }
  16.  
  17. class Txt extends File {
  18. private $_content;
  19.  
  20. public function __construct($content) {
  21. parent::__construct();
  22. $this->_content = $content;
  23. }
  24.  
  25. public function addContent($addedContent) {
  26. //tralala
  27. }
  28. }
  29.  


Kumasz? (IMG:style_emoticons/default/biggrin.gif)
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 Aktualny czas: 17.10.2025 - 22:14