![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 37 Pomógł: 2 Dołączył: 11.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Załóżmy, że mamy klasy:
i teraz pytanie... Czy jest jakaś możliwość, aby podczas dziedziczenia przekazać do klasy Second() otrzymaną już wcześniej wartość pola $this->zmienna2 , np by ponownie nie łączyć się z bazą i nie wykonywać chociażby formatowania wyniku (tak np). Tak jakby co na google szukałem, ale kto wie może źle sformuoływałem pytanie? Ten post edytował Rudi1204 29.04.2011, 08:27:38 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
$klasa oraz $inna_klasa to dwa rożne obiekty nie mające nic ze sobą wspólnego. Dziedziczenie działa na zupełnie innej płaszczyźnie niż myślisz.
A jak przekazac? Bardzo prosto: $inna_klasa->zmienna2 = $klasa->zmienna2; -------------------- "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: 37 Pomógł: 2 Dołączył: 11.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
$klasa oraz $inna_klasa to dwa rożne obiekty nie mające nic ze sobą wspólnego. Dziedziczenie działa na zupełnie innej płaszczyźnie niż myślisz. A jak przekazac? Bardzo prosto:
No ok, ale czy dobrze rozumiem, że w takim razie nie ma możliwości przekazania jakoś wewnątrz klasy Second (później np jeszcze zrobić tak samo w innych klasach Thirt, Nezxt i tak dalej...) ![]() EDIT: poprostu chciał bym żeby $this->zmienna2 była dostępna we wszystkich innych klasach które później będę pisał (czyli klasa Base była by takim konstruktorem, albo ConfigSetterem), coś w rodzaju jak rozszerzenie zasięgu (taki global bez użycia global) Ten post edytował Rudi1204 29.04.2011, 08:07:42 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Totalnie źle do tego podchodzisz.
1) Nowy obiekt nie ma nic do innego obiektu nawet z tej samej klasy 2) W base łączysz się bazą i chcesz to dziedziczyć? Dziedziczenie nie do takich celów służy. Poczytaj o wzorcach projektowych, np. Registry - wkładasz sobie obiekt bazy do rejestru i wyciągasz z niego kiedy potrzebujesz. Tego nie załatwia się przez dziedziczenie. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat (taki global bez użycia global) Czyli jeszcze większe zło bo dodatkowo ukrywasz fakt, że korzystasz z przestrzeni globalnej.Dziedziczenie nie działa na zasadzie "nowo utworzone obiekty otrzymują w spadku dane z już istniejących obiektów". Nowo utworzone obiekty, których klasy dziedziczą po innych klasach otrzymują jedynie "infrastrukturę". Pamiętaj, że w programowaniu obiektowym trzeba zawsze patrzeć przez pryzmat obiektów, nie klas (chyba, że ma się do czynienia z właściwościami lub metodami statycznymi, na które w tym przypadku nie ma najprawdopodobniej miejsca). Gdybyś dokładnie opisał co chcesz stworzyć moglibyśmy Ci poradzić najlepsze rozwiązanie. PS. Przestrzegaj konwencji nazewnictwa i stosuj konwencję camelCase, czyli ustawZmienna2(), setKey() itd. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 37 Pomógł: 2 Dołączył: 11.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dokładniej to chodzi mi o stworzenie klasy głównej Base, która by pobierała na podstawie przekazanych zmiennych metodą $_GET no np wartości component (czyli com_component = test w url by było). Następnie łącząc się z bazą pobiera parametry tego kompnentu i przekazuje je do tablicy, dzieki pomocniczej funkcji importuje właściwy pliczek z klasą kontrolera właściwego komponentu i przekazuje tam tą właśnie tablicę z parametrami. Czyli klasa Base to był by taki Base Controller. (tak na szybko, mam nadzieje, że za bardzo nie namotałem :])
ps. - nazewnictwo zmienione |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Obiekty nigdy nie powinny korzystać z czegokolwiek z przestrzeni globalnej (patrz użycie $_GET) - to prowadzi zawsze do problemów nawet w przypadku niezbyt rozbudowanych aplikacji.
2. Jeden obiekt jedno zadanie. Utwórz osobny obiekt reprezentujący żądanie HTTP, osobny pobierający dane z bazy danych. 3. Pamiętaj że dziedziczenie to rodzaj relacji jest (is a), natomiast Ty masz tutaj wszędzie co najwyżej relację ma (has a), tak więc obiekty powinieneś jawnie wstrzyknąć jako zależności. Ten post edytował Crozin 29.04.2011, 08:54:38 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
skorzystaj ze zmiennej statycznej ;] - zdeklaruj ją w tej klasie bazowej protected static [by z zewąntrz nic jej nie mogło napisać] lub public static [ale wtedy zmienną ktoś Ci może przestawić z zewnątrz klasy/obiektu]
pewnie innym to rozwiazanie nie będzie pasowało ale umówmy się, że odłożyłeś pewną wartość pod określoną zmienną w lokalnym skope dla pewnej rozdziny klasy - tą zmienną możesz też zmieniać w klasach potomnych ;]... lub zdeklaruj private static $zmienna i ustawiaj ją przez odpowiednie metody dostępowe ;] Poczytaj o wzorcach projektowych, np. Registry - wkładasz sobie obiekt bazy do rejestru i wyciągasz z niego kiedy potrzebujesz. Tego nie załatwia się przez dziedziczenie. -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 37 Pomógł: 2 Dołączył: 11.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
w sumie troche poszperałem poszukałem i dzięki waszym podpowiedzią znalazłem przykłady użycia rejestru
Odwołanie z klasy do obiektu bez global oraz Przekazanie klasy do innej klasy, Przekazanie klasy do innej klasy ... i jak narazie pasi mi to (narazie bo siedze w pracy jesczze i robie cos innego ;p) ale tak czy inaczej DZIĘKI WSZYSTKIM ZA POMOC ![]() |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 81 Pomógł: 4 Dołączył: 15.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Żeby łatwo było zaprzyjaźnić Ci się z Dependency Injection polecam...
https://github.com/fabpot/pimple. I pamiętaj, nie wynajduj koła na nowo. Własny framework to dobry sposób na naukę, ale są lepsze. (en) Pozdrawiam. @edit: typo. Ten post edytował pejott 29.04.2011, 18:54:00 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 05:40 |