![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 17.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cześć,
Mam jak dotąd dość podstawowe pojęcie o programowaniu obiektowym w PHP, ale staram się go nauczyc efektywnie wykorzystywać, co mam nadzieję, zaprocentuje w przyszłości... Piszę właśnie stosunkowo prostą aplikację ale nie wiem jak rozwiązać jedną kwestię koncepcyjną mam taki oto plik index.php
I teraz, chciałbym zeby w jakis sposob metody i pola z $instancja_klasy_a były dostępne w obrębie innych klas. Pytanie teraz czy jest jakas możliwośćbo zrobic cos takiego ? Czy jesli klasy B, C itp bedą dziedziczyć po klasie A, metody i pola z $instancja_klasy_a będą dostępne z poziomu innych klas? Oczywiscie moge tworzyć instancje klasy A w konstruktorze albo w metodach klasy B i C ale chciałbym tego uniknąć gdyż klasa A jest dość mocno obciążającą serwer i chciałbym uniknąć wielokrotnego przetwarzania tych samych danych... Z góry dzięki za pomoc |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 732 Pomógł: 80 Dołączył: 25.05.2005 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
Czy jesli klasy B, C itp bedą dziedziczyć po klasie A, metody i pola z $instancja_klasy_a będą dostępne z poziomu innych klas? Nie bardzo rozumiem te pytanie. Chcesz ze zmiennej $instancja_klasy_a, wyciągnąć metody klas B i C ? -------------------- DevBlog - http://www.bartekrogus.pl
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 17.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nie bardzo rozumiem te pytanie. Chcesz ze zmiennej $instancja_klasy_a, wyciągnąć metody klas B i C ? Nie.. Wyobraz sobie sytuacje, kiedy klasa a laczy sie z baza danych i wyciaga jakies dane ktore przechowuje w polach. Oczywiscie beda to pola instancji tej klasy. Teraz, w klasach B C i innych chciałbym skorzystać z danych jakie zawierają pola instancji klasy A... |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 4.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie.. Wyobraz sobie sytuacje, kiedy klasa a laczy sie z baza danych i wyciaga jakies dane ktore przechowuje w polach. Oczywiscie beda to pola instancji tej klasy. Teraz, w klasach B C i innych chciałbym skorzystać z danych jakie zawierają pola instancji klasy A... IMO najprościej byłoby zrobić publiczne metody typu getXXX() albo, w przypadku dziedziczenia, nadać im atrybut protected. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 17.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
IMO najprościej byłoby zrobić publiczne metody typu getXXX() albo, w przypadku dziedziczenia, nadać im atrybut protected. I tak tez zrobiłem ale nie mogę się odwołać do pol instancji klasy a z poziomu metod klasy B. Czy dziedziczenie cos tu zmieni ? Ew. prosiłbym o przykład takiego odwołania bo jakoś nie do konca wiem jak to mozna zrobic |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 4.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
I tak tez zrobiłem ale nie mogę się odwołać do pol instancji klasy a z poziomu metod klasy B. Czy dziedziczenie cos tu zmieni ? Ew. prosiłbym o przykład takiego odwołania bo jakoś nie do konca wiem jak to mozna zrobic Nie wiem dokładnie, ale powinno (OOP znam tylko z C++ ;P). Wyglądało by to tak: Kod class A { protected $jakiesPole; } class B extends A { function jakasMetoda() { $innePole = $jakiesPole; } } Nie jestem pewny, czy będzie działać (z pamięci piszę). |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 732 Pomógł: 80 Dołączył: 25.05.2005 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem dokładnie, ale powinno (OOP znam tylko z C++ ;P). Wyglądało by to tak: Kod class A { protected $jakiesPole; } class B extends A { function jakasMetoda() { $innePole = $jakiesPole; } } Nie jestem pewny, czy będzie działać (z pamięci piszę). hmm.. a nie tak ?:
Ten post edytował sniezny_wilk 17.04.2008, 23:21:21 -------------------- DevBlog - http://www.bartekrogus.pl
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 17.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem dokładnie, ale powinno (OOP znam tylko z C++ ;P). Wyglądało by to tak: Kod class A { protected $jakiesPole; } class B extends A { function jakasMetoda() { $innePole = $jakiesPole; } } Nie jestem pewny, czy będzie działać (z pamięci piszę). Hm... wydaje mi sie ze to nie bedzie działać. Odwołanie bezpośrednio do pola klasy A raczej jest nie mozliwe, bo mozliwe jest wystąpienie kilku instancji klasy A wiec nie za bardzo wtedy byłoby wiadomo gdzie sie odwoływać.... Ustawiłem klase B jako dziedziczną po A. Wywołuję instancję klasy A i B, a w klasie b w jednej z metod odwołuję sie do metody klasy a (która miała by mi zwracac zmienna / tablice ) poprzez $inst_klasy_a -> get (); jednak dostaję komunikat: Undefined variable: inst_klasy_a Fatal error: Call to a member function get() on a non-object... |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 732 Pomógł: 80 Dołączył: 25.05.2005 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj mój przykład który podałem wyżej, jeśli nie będzie działo, podaj kawałek kodu, może tak będzie łatwiej analizować.
-------------------- DevBlog - http://www.bartekrogus.pl
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Instancję klasy A możesz przekazywać do tych dwóch pozostałych obiektów, a i tak obiekt klasy A będzie jeden.
Dziedziczenie wykorzystujemy kiedy jest logiczne, a nie kiedy jest nam wygodnie. -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 17.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Instancję klasy A możesz przekazywać do tych dwóch pozostałych obiektów, a i tak obiekt klasy A będzie jeden.
Dziedziczenie wykorzystujemy kiedy jest logiczne, a nie kiedy jest nam wygodnie. To jest dokładnie to o co mi chodziło. PS. Czy mozna w jakis sposób (bez podawania parametru) wymusic by przekazanie instancji klasy A (takie jak ma miejsce w funkcji setClassA) mialo miejsce w konstruktorze klasy B (moge nawet przyjąc ze bedę zawsze tak samo nazywał instancje klasy A) Dziekuję wszystkim jeszcze raz za okazaną pomoc... Ten post edytował poligon81 17.04.2008, 23:59:13 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Jest taka możliwość.
Ale właśnie specjalnie ją ominąłem, bo nie jestem do końca przekonany czy powinno się ich uczyć. Jeden to "antywzorzec" projektowy Singleton, drugi Registry. Trochę innych http://forumphp.nq.pl/Wzorce_projektowe_t66523.html ale to jest problematyczne zagadnienie, nawet jak się umie dobrze posługiwać obiektami (problematyczne, aby zrozumieć i dobrze stosować) -------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 04:40 |