![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Właśnie sobie uświadomiłem że dopiero raczkuję w programowaniu obiektowym, bo nie wiem nawet czy to jest możliwe: mam zamiar odnieść się do $zmienna znajdującej się w $obiekta w innym utworzonym przez niego obiekcie.
Czy to jest w ogóle możliwe? ![]() Pozdrawiam Ten post edytował l0ud 29.03.2008, 21:28:03 -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Nie, ale możesz przekazać referencję obiektu A do obiektu B i wtedy się da
![]() Pozdrawiam. -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Właśnie sobie uświadomiłem że dopiero raczkuję w programowaniu obiektowym, bo nie wiem nawet czy to jest możliwe: mam zamiar odnieść się do $zmienna znajdującej się w $obiekta w innym utworzonym przez niego obiekcie.
Czy to jest w ogóle możliwe? ![]() Pozdrawiam Rozwiązanie twojego problemu jest aż za proste ![]() class B extends A -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem, że masz na myśli coś takiego?
Zaczynam się zastanawiać, czy jest to dobre rozwiązanie przy większej aplikacji. Przykład powyżej był uproszczony: w rzeczywistości mam obiekt inicjujący, który wczytuje inne, tworzy i dodaje do swoich zmiennych (uciekło mi właściwe słowo). Te wczytane obiekty powinny móc się do siebie odnosić i dotychczas myślałem że będzie to możliwe bez problemów przez obiekt rodzica (inicjujący). Teraz się zastanawiam, czy przekazując za każdym razem jego instancję nie dochodzę do jakiegoś antywzorca? -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem, że masz na myśli coś takiego?
Zaczynam się zastanawiać, czy jest to dobre rozwiązanie przy większej aplikacji. Przykład powyżej był uproszczony: w rzeczywistości mam obiekt inicjujący, który wczytuje inne, tworzy i dodaje do swoich zmiennych (uciekło mi właściwe słowo). Te wczytane obiekty powinny móc się do siebie odnosić i dotychczas myślałem że będzie to możliwe bez problemów przez obiekt rodzica (inicjujący). Teraz się zastanawiam, czy przekazując za każdym razem jego instancję nie dochodzę do jakiegoś antywzorca? nie... Ten post edytował pyro 29.03.2008, 22:09:55 -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
@pyro, nie wiem do czego Twoja odpowiedź się odnosi, bo w cytacie znajdują się 3 pytania.
@Moli, nie zrozumiałem tego zbytnio. Chodzi mi o odniesienie się w podrzędnym obiekcie do nadrzędnego, a nie odwrotnie. -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
@Moli, ale ja chcę się odnieść do konkretnego obiektu zawierającego swoje zmienne i dane a nie tylko odziedziczyć jego metody
![]() -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
@Moli, ale ja chcę się odnieść do konkretnego obiektu zawierającego swoje zmienne i dane a nie tylko odziedziczyć jego metody ![]() dziedziczysz tez zmienne i inne dane od rodzica -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat dziedziczysz tez zmienne i inne dane od rodzica Ale nie konkretnego. (albo jestem ciągle w błędzie). Przykład: jest obiekt $db a po nim dziedziczy $queryMaker . Dane do bazy dla $db podajemy w konstruktorze. Teraz chcemy w $queryMaker wykonać zapytanie do bazy wykorzystując obiekt $db, który został już utworzony. Chyba nie uda się to przy użyciu dziedziczenia? ![]() -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
Dlaczego miałoby się nie udać?
Różnica jest taka, że tworzymy tylko obiekt klasy QueryMaker. Jako że klasa ta nie ma swojego konstruktora to wywoływany jest konstruktor rodzica i nawiązywane jest połączenie z bazą danych. Takie rozwiązanie ma jednak sporo wad, np.: nie da się teraz sensownie przekazać parametrów połączenia z bazą - musiałbyś przerobić klasę DB na statyczną. Trzeba także zrobić z QueryMakera Singleton bo każda nowa instancja będzie nawiązywała nowe połączenie z bazą danych. Ja proponowałbym coś takiego:
Warto też poczytać o: Criteria http://www.php.net/manual/pl/language.oop5.static.php http://www.php.net/manual/pl/language.oop5...nekudotayim.php http://www.php.net/manual/pl/language.oop5.interfaces.php http://www.php.net/manual/pl/language.oop5.typehinting.php -------------------- "Sumienie mam czyste, bo nieużywane."
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ale nie konkretnego. (albo jestem ciągle w błędzie). Przykład: jest obiekt $db a po nim dziedziczy $queryMaker . Dane do bazy dla $db podajemy w konstruktorze. Teraz chcemy w $queryMaker wykonać zapytanie do bazy wykorzystując obiekt $db, który został już utworzony. Chyba nie uda się to przy użyciu dziedziczenia? ![]() jakto nie konkretnego? DZIEDZICZYSZ DANE KONKRETNEGO DZIEDZICZONEGO RODZICA, czyli tego, którego podasz w paramtetrze extends -------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Kicok, dzięki wielkie Twoja odpowiedź na pewno mi się przyda przy budowie sterownika bazy
![]() Wymyśliłem utworzenie głównego obiektu $fbCore, który będzie tworzył i przechowywał wszystkie inne, przekazując im przy tworzeniu swoją instancję. Wtedy taka dołączona klasa miałaby możliwość np. do odniesienia się do wcześniej zadeklarowanej klasy bazy danych w ten sposób: (przykładowy fragment):
Po czym inne obiekty mogłyby się odnieść do configRegistry przez $fbCore->getObject('configRegistry') ![]() Główny problem, to czy nie dochodzimy w takiej koncepcji do jakiegoś antywzorca? ![]() Pozdrawiam -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Przenoszę na OOP
Nie będzie to jakiś antywzorzec, a przynajmniej ja tego problemu nie widzę. Możesz opisać, dlaczego tak uważasz? -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Bo za każdym razem przekazujemy wszystko do wszystkiego, czyli do każdego wczytanego obiektu przekazujemy instancję $dbCore które zawiera instancje do wszystkich innych klas. Chociaż tak po przemyśleniu, chyba nie jest to aż tak strasznie zasobożerne? Druga sprawa, że od razu zakładamy że każdy wczytany obiekt musi pobierać w konstruktorze tylko instancję $dbcore. Chociaż to chyba również nie jest takie złe, bo mamy jeden interfejs do tego i porządek?
![]() Generalnie w powyższym poście chodziło mi o ocenę pomysłu przez osobę bardziej doświadczoną z OOP. Nie chciałbym popełnić poważnych błędów już na starcie tworzenia rozbudowanej aplikacji. Pozdrawiam -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Pamiętaj, że przechowujesz tylko referencje do obiektów, więc nie jest to coś strasznego. Należy jedynie uważać z kopiami obiektów
![]() Pozdrawiam -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Problemów z kopiami raczej nie będzie, bo klasa jest includowana i obiekt z niej tworzony tylko raz, przez użycie $fbCore->loadX() . Za każdym każdym razem gdy jest potrzebny, pobieram instancję przez $dbCore->getObject() . Myślę, że to dobra metoda pod warunkiem, że uwzględni się wyjątki takie jak np. klasy abstrakcyjne.
Tak więc problem rozwiązany ![]() Dzięki za pomoc Pozdrawiam -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem dlaczego, ale w trakcie czytania na myśl nasunęły mi się dwa wzorce, Budowniczy i Obserwator...
(ale zmęczony jestem, więc nie analizuję tego dokładniej, muszę w końcu wypocząć... ach ten remont) Pamiętaj, że przechowujesz tylko referencje do obiektów, więc nie jest to coś strasznego. Należy jedynie uważać z kopiami obiektów ![]() Dlatego w PHP5 domyślnie jest przy przypisaniu referencja robiona. (można wywalić & jak używasz PHP5 [a masz public więc na pewno tak jest]) Do tego kopiowanie jest ciężkie jak są złożone zależności. Tak myśląc jednak trochę, to Budowniczy trochę jest innego zastosowania... Ale jeśli te wartości się nie zmieniają, to ustawienie ich jest najlepszym rozwiązaniem. Natomiast jeśli są zmienne to można chyba użyć obserwatora, ale to jeśli jest potrzeba reakcji na zmianę... W sumie to coś mi się wydaje, że można by było te wartości przekazać tamtemu budowanemu obiektowi, ale musiał bym się wczytać. (I jak już wiele razy pisałem, nie przedstawiajcie swoich rozwiązań, przemyśleń, a to co macie zrobić. Mówię tak bo to problem jest do rozwiązania, a wielokrotnie już się zdarzało, że autor proponując rozwiązanie nie przedstawił tego dobrze. Tak więc piszcie co jest problemem, a potem co najwyżej swoją propozycję, bo jak nie wiemy co dokładnie mamy rozwiązać, ciężko coś doradzić. Tak jak czy to się zmienia, czy obiekty muszą wiedzieć o zmianie itp. itd, a niże w ogóle inaczej to rozwiązać? Dlatego dobry opis problemu jest tak ważny) -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 08:10 |