![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 4 Dołączył: 21.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Są sobie 3 obiekty:
StdObj Produkt Produkt_extendent dziedziczą jeden po drugim. i teraz taka sytuacja - chcę zwrócić listę w pełni wypełnionych obektów z bazy
no i jedziemy z koksem:
No i jest dupa - bo w metodzie Produkt_ext -> dbPobierz() wywołuję parent::dbPobierz($this->produkt_id); a w dbPobierz() już nie wykonuje się __construct_from_assoc() z Produkt - tylko z Produkt_ext. Nie mogę wrzucić do $Produkt->dbPobierz() zamiast $this -> __construct_from_assoc($produkt); dać parent no bo to nie logiczne i przestanie mi działać.... No any way.... to jakaś lipa.... W skrócie jeszcze raz W poziomu Produkt_ext wywołuję parent::dbPobierz. W ciele klasy Produkt jest wywoływana metoda __construct_from_assoc (ale Produkt_ext też ma metodę __construct_from_assoc) no i wywołuje się ta z Produkt_ext a nie z Produkt. Jakaś rada?? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 4 Dołączył: 21.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Prosta sprawa
Wszystkie klasy mają wspólny interface. Każda klasa ma takie same metody i każda działa w podobny sposób to ułatwia sprawę w pisaniu. Teraz tak - StdObj i Produkt jest ok - ale w obiekcie Produkt_extend chciałbym przeciążyć metodę. Niektóre produkty są złożone (zestaw, bądź ten sam produkt ma kilka opcji) więc powstaje odbiekt Produkt_ext. Robimy to przez rozszerzenie Produkt_ext extends Produkt. No i teraz potrzebuję wyciągnąć z bazy kompletny produkt rozszerzony. i teraz już w kodzie tworzę produkt_ext - z bazy wyciągam dane na temat rozszerzonego produktu, gdzie mam id produktu podstawowego (i w Produkt_ext -> dbPobierz chciałbym wypełnić atrybuty odziedziczone po Produkt danymi z bazy metodą która istnieje już w ciele bazy rodzica) Wszystko było by dobrze, gdyby php zachował się w prawidłowy sposób. Wywołując parent::dbPobierz - oczekuję, że wywołuję metodę rodzica - tak też się dzije, ale w dbPobierz rodzica wszystkie metody odwołują zachowują się tak jak by to był Produkt_ext, a nie Produkt.
Drugi podkreślony fragment nie zachowuję się już ja w swoim ciele, ale $this nagle zaczyna się zachowywać jakby był Produkt_ext $p = New Produkt_ext $p -> dbPobierz() - w nim jest parent::dbPobierz() a w parent::dbPobierz jest $this->__construct_from_assoc() - i tu jest problem bo powinien się zachować jak parent::__construct_from_assoc(), a nie robi tego. Innym OMINIĘCIEM problemu jest zrobienie __construct_from_assoc_ext() dla Produkt_ext, ale wtedy nie utrzymuję konwencji narzuconej przez interface i cała dbałość o porządek bierze w łeb. Czy ktoś tu jest javoviec - i rozumie takie kwestie i ma jakiś pomysł na zapisanie takiej konstrukcji w PHP?? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 13:20 |