Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klonowanie obiektu pytanie
Forum PHP.pl > Forum > PHP > Object-oriented programming
acztery
mam takie pytanie.

Tworze np obiket Doc(); przekazuje do niego kilka parametrów i wywołuje 1 metode. teraz chce wywyłać tę samą metodę z innymi parametrami.

czy takie podejście jest dobre. chce uniknąc ze jakies parametru np sie nadpiszą czy coś..

  1. <?php
  2. $classDoc = new Doc();
  3. $classDoc->_where = "Cytaty";
  4. $classDoc->_lang = Lang::getDisLang();
  5. $smarty->assign('RandCytat',$classDoc->getRandDoc(1));
  6.  
  7. $classDocC1 = clone $classDoc;
  8. $classDocC1->_where = "Powitanie";
  9. $smarty->assign('Powitanie',$classDocC1->getDoc());
  10.  
  11. $classDocC2 = clone $classDoc;
  12. $classDocC2->_path = "Artykuly";
  13. $classDocC2->_t = "1";
  14. $classDocC2->_f = "1";
  15. $smarty->assign('RandDocOne',$classDocC2->likeDocumentsOfPath());
  16. ?>
LBO
Cytat(acztery @ 3.04.2007, 12:24:11 ) *
czy takie podejście jest dobre. chce uniknąc ze jakies parametru np sie nadpiszą czy coś..

Nie lepiej stworzyć klasy dziedziczące po Doc? Kod by się uprościł, stał bardziej logiczny.

Nie piszę, że to co zrobiłeś jest złe, do czegoś klonowanie obiektów musi służyć.

edit:

Albo jeszcze lepiej niż dziedziczyć, byłoby zagregować (kompozycja) Doc() w tych nowych klasach.
acztery
LBO jak w nowych klasach cały czas korzystam z 1 new Doc żadne inne mi są nie potrzebnę, klasa doc już dziedziczy z inne klasy User.

wiec co ma namyśli pisząc "w tych nowych klasach"
LBO
Jak dla mnie wprowadziłeś za dużą abstrakcję tzn. Jedna klasa obsługuje "Cytaty", "Artykuły" etc. a co za tym idzie musisz za każdym razem ustawiać swój obiekt, żeby pobrał odpowiednie rzeczy.

Ja stworzyłbym odpowiednie klasy Articles, Citation i co tam jeszcze masz. A jak to zależy od ciebie - możesz dziedziczyć po Doc, albo jak zreflektowałem później, zagregować.

edit:
Cytat
klasa doc już dziedziczy z inne klasy User.

Dokument dziedziczy po użytkowniku?
acztery
nie z ty dziedziczeniem nie po użytkowniku tylko po innej klasie gdzie np mogę ustawić nazwę tabeli itp ale mało istotne.

a jak miał bym takich drobnych rzeczy 100 to co mam tworzyć 100 klas... wszystkie te dane są przechowywane w 1 tabeli bazie danych documents każdy dokument może być w kategorii i mieć różne opcje. Cytat jest traktowany jako dokument który jest w kategorii Cytaty itd. Czy klonowanie spowalnia w jakimś stopniu działanie kodu.

Ps myślę ze lepiej klonować niż inicjować klasę na nowo.
LBO
Cytat(acztery @ 3.04.2007, 12:57:41 ) *
a jak miał bym takich drobnych rzeczy 100 to co mam tworzyć 100 klas


Niekoniecznie, ja tylko daję wg mnie dobrą radę. I tak wszystko zależy od Ciebie.
Ewidentnie klonujesz, po to, żeby mieć mniej do wklepywania, ja tylko powiedziałem jak to ułatwić, o!

Cytat(acztery @ 3.04.2007, 12:57:41 ) *
Ps myślę ze lepiej klonować niż inicjować klasę na nowo.


To ja myślę, że lepiej dziedziczyć, niż klonować.
Sumarycznie, tak czy siak, przybędzie jeden obiekt w pamięci,a jako programista nie musisz się martwić "ustawianiem" obiektu.

//edit

a'propos
Cytat(acztery @ 3.04.2007, 12:57:41 ) *
a jak miał bym takich drobnych rzeczy 100 to co mam tworzyć 100 klas

Są Obiekty i obiekciki, w twoim wypadku Dokumenty i dokumenciki smile.gif Pamiętaj o tym.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.