![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 9.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
![]() Od niedawna mam pewien problem. Otóż załóżmy, że mamy klasy a, b i c. Klasa c to klasa główna która po kolei tworzy obiekty a i b. Klasa a dziedziczy klasę c i np. definiuje: $this -> foo = 'bar'; Klasa b również dziedziczy klasę c i wyświetla na ekranie $this -> foo; Niestety na ekranie nie pokazuje się 'boo'. :/ Mniej więcej tak by to wyglądało:
Mógłby ktoś powiedzieć w czym jest problem oraz ew. jak go rozwiązać? z góry dziękuję za odpowiedzi. pozdrawiam mrKrecik Ten post edytował mrKrecik 6.01.2007, 17:38:29 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 472 Pomógł: 7 Dołączył: 7.12.2005 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Zazwyczaj jeśli tworzysz extenda danej klasy to wywołujesz tą klasę, która extenduje a nie jest extendowana. $foo nie będzie widoczna w klasie c.
Nie możesz wywoływać obiektu poprzez new c; (to już poza klasami - w pliku), a tak zapewne robisz. -------------------- Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz! |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 9.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Eee... :/
No bo sobie napisałem silnik (klasa c), który następnie ściąga sobie różne biblioteki jak mysql, smarty itp. (klasa a), a następnie ładuje moduł, który odpowiedzialny jest za wyświetlenie czegoś na stronie (klasa B). :/ W takim razie jak to mogę rozwiązać? Ten post edytował mrKrecik 6.01.2007, 19:04:21 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Niestety - ale nie zrozumiałeś podstawowego założenia, jakie przyświeca programowaniu obiektowemu.
Wyobraź to sobie na przykładzie. Klasa C to Krzesło (schemat krzesła) Klasa A to KrzesłoDrewniane (projekt, jak je wykonać) Klasa B to KrzesloMetalowe ( -||- ) Stolarz tworzy krzesło drewniane, na podstawie A, a DOPIERO potem maluje je na zielono. Ślusarz produkuje krzesło metalowe, na podstawie B, a potem dziwi się, dlaczego nie są one od razu pomalowane. Nie sądzisz, że byłoby to nieco dziwne? W twoim przypadku tak wygląda sytuacja z Foo, niezależnie od tego, że taki zapis nie jest zalecany (tego typu rekurencja wydaje się wręcz zupełnie absurdalna, jeśli nie błędna) -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 9.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
No tak - masz rację. :/
Ale w takim razie na jakiej zasadzie by to rozwiązać? Bo ok - z tym Foo to może przesada, ale ... Czy taka konstrukcja silnika jest dobra? Tzn. jest główna klasa silnika, która ładuje odpowiednie biblioteki (mysql, smarty itp.) oraz moduł, który jest odpowiedzialny za daną podstronę. A tak dokładnie to te biblioteki są ładowane dopiero w module (bo np. nie zawsze jest potrzebny mysql) poprzez metody zawarte w głównej klasie (loadLib() ![]() ![]() pozdrawiam mrKrecik |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
poczytaj o Singleton'ie
-------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 9.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Nom niby wiem co to singleton, ale nie wiem jak to wykorzystać w moim problemie.
![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Nom niby wiem co to singleton, ale nie wiem jak to wykorzystać w moim problemie. Są przynajmniej 2 sposoby. Do Twojego bardziej pasuje Registry: http://forum.php.pl/index.php?s=&showt...st&p=325122 Ale nie jest błędem użyć zwykłego singletona - ta sama zasada: http://webcity.pl/webcity/artykuly.php/t/62 Jeżeli wybierzesz singleton, wypadałoby aby klasa A otrzymała nowy atrybut protected static $_oSingleton = null; oraz metodę protected __construct() i jakąś do zwrócenia singletona. Zastosowanie...
Ważnym działaniem jest instrukcja warunkowa w metodzie Run(). Pozdrawiam, Athlan ![]() -------------------- Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.08.2025 - 22:53 |