![]() |
![]() |
![]()
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?? -------------------- ==============================================
Bo ja jestem Wróbelek Htmlek ============================================== |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat 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. Tak dziala dziedziczenie ![]() Jaka rada? Zastanow sie co to ma robic i zapisz inaczej. Za bardzo nie moge ci wiecej pomoc bo nie rozumiem Twojego toku myslenia -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 411 Pomógł: 35 Dołączył: 27.06.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Myślę, że rozumiem o co chodzi koledze: chciałby aby wywołanie w klasie dziedziczącej konstruktora rodzica powodowało stworzenie instancji obiektu rodzica. Nie wiem tylko po co.
-------------------- |
|
|
![]()
Post
#4
|
|
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?? -------------------- ==============================================
Bo ja jestem Wróbelek Htmlek ============================================== |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Czy ktoś tu jest javoviec - i rozumie takie kwestie Co ma piernik do wiatraka? W javie tak samo to zadziala.Jak chcesz miec wywolanie funkcji z PRoduct to Ext tez musisz dac parent::
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 78 Pomógł: 4 Dołączył: 21.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
No to może inaczej zapytam - jak przeciążyć nazwę metody w PHP??
Czy ktoś wie?? -------------------- ==============================================
Bo ja jestem Wróbelek Htmlek ============================================== |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
PHP nie umozliwia przeciążania metod. To nie java
![]() W php za to można jako parametr przekac rozne typy danych. Na tej podstawie mozesz kombinowac ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
No to może inaczej zapytam - jak przeciążyć nazwę metody w PHP?? Czy ktoś wie?? PHP nie umozliwia przeciążania metod. To nie java ![]() W php za to można jako parametr przekac rozne typy danych. Na tej podstawie mozesz kombinowac ![]() Przeciążanie samo w sobie nie jest możliwe w PHP, jednak jest kilka funkcji, które mogą "emulować" takie zachowanie: func_get_arg func_num_args func_get_args Dzięki temu możesz przekazywać do metody dowolną ilość argumentów o różnych typach. Jednak z doświadczenia wiem, że rozwiązanie nie należy do najprzyjemniejszych w użyciu. -------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Już nawet przyjmując jeden argument o różnych typach (np. id rekordu, lub AR ) ciężko się czyta kod, czy też go dokumentuje.
(choć stosując pewną strategię można to zrobić nawet w miarę ładnie) No cóż ale na przeciążanie raczej nie ma co liczyć w PHP... -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 05:33 |