![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 6.10.2004 Skąd: Wschodnia Polska Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich na forum,
Przerzucilem sie niedawno na php5 i przy okazji budowy nowej strony postanowilem przepisac od nowa moje jadro i zadbac by bylo ono calkowicie obiektowe. No i tak zaczalem kodowac wg. tego co mialem dawniej, az natrafilem na problem komunikacji wewnatrz calego systemu. Okazalo sie ze nie jest to takie proste (przynajmniej dla mnie, slabego z OO), dlatego chcialbym prosic Was o pomoc. W chwili obecnej wyglada u mnie to tak:
Teraz uzycie:
Mam nadzieje ze jest to dosyc jasne, do takiego rozwiazanie teraz doszedlem, jednak uwazam iz cos robie zle - zapewne da sie to inaczej (lepiej) rozwiazac. Chcialbym bowiem w klasie news miec dostep do metod klasy $db, nie dziala mi takze $site->assign('zmienna','wartosc') (klasa site jest extends Smarty) - jednym slowem: nie wiem jak rozwiazac ta komunikacje. Czyli aby w klasie news (i w klasach innych modulow) bez problemu operowac na $db czy na $site.. Jak to rozwiazac? Chcialbym np. za pomoca metody klasy news , zmienic wartosc wlasciwosci klasy site (engine).. Bede wdzieczny za pomoc.. Nie wiem czy jasno napisalem, jesli nie to prosze rowniez pisac, postaram sie jasniej.. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj sobie o czymś takim jak Singleton.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 6.10.2004 Skąd: Wschodnia Polska Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedź, poczytałem na tymże forum o singletonie no i zaczęło mi działać, ale mam jeszcze kilka pytań, gdyż nie wiem czy robię dobrze..
Dopisałem do klasy engine i db metodę getInstance, która zwraca instancję tejże klasy. I teraz w klasie news robię tak:
Jak widać - pobieram instancje klas engine i sqlite, i przypisuje je do wlasciwosci klasy news ($site i $db). Teraz gdy w metodzie getNews() chce odwolac sie np. do metody klasy $db musze robic tak:
Da sie to jakos ominac, tzn. abym mógł sobie wywoływac $db->query(), a nie $this->db->query() ? Wydaje mi się, że jedyną taką możliwością jest tworzenie w każdej metodzie klasy news instancji do engine/sqlite. Czyli w ten sposob:
Co jednak nie jest zbyt wygodne... Mam też taki problem: Gdy robie cos takiego:
A nastepnie w pliku index.php dam:
Chodzi o to, że w klasie news tworzę instancję klasy engine, następnie przypisuję ją właściwości klasy news, potem robię $this->site->templateFile='szablonik.tpl' i wlasciwosc templateFile zmienia sie tylko gdy wywolam ja z wewnatrz, tzn. $this->site->TemplateFile - dziala, a $site->templateFile (wywolane z zewnatrz) - nie dziala. Kurcze.. chyba troche niezrozumiale napisalem.. Moze jednak po krotkiej analizie kodu stanie sie to jasne - jesli nie, postaram sie napisac jasniej. Z gory dzieki za pomoc i przepraszam ze tak zamieszalem.. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 10:36 |