![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 12.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam kłopot myślowy co do zagospodarowywania zasobów podczas tworzenia obiektów.
Wprowadzenie: mamy serwis, w którym wykorzystywane są: - 3 klasy podstawowe (połączenie z DB, obsługa zapytań, klasa serwisowa). Klasy te dzidziczą od siebie w podanej kolejności - 1 klasa do obsługi prezentacji - 2 klasy specjalizowane (obsługjące konkretne działy serwisu, np. newsy i forum) Pytanie: Czy sensowne jest rozwiązanie, w którym robimy dwie ścieżki dziedziczenia: od klasy News poprzez Prezentację i klasy podstawowe i od klasy Forum poprzez Prezentację i klasy podstawowe? Klasy News i Forum używane są rownocześnie tylko 2 razy, ale spowoduje to niepotrzebne dwukrotne wywołanie klasy Prezentacji i klas podstawowych. Czy może jest sensowniejsze rozwiązanie? Dodam, że funkcjonalność klas News i Forum zasadza się na użyciu metod z klas podstawowych. -------------------- pozdrawiam
Krzysiek |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Ja może napisze jak ja to robie...
mam klase main która jest extends functions klase functions oraz inne np user, admin, profil, stats,search itd które są extends do function. jak mam jakąś funkcje dla wszystkich to wrzucam ją do klasy functions jeśli nie to do odpowiedniego pliku. Później sprawdzam która klasa jest potrzebna i includuje jej pliki oraz tworze obiekt... Nie wiem jak bym tak pare razy nie dziedziczył... -------------------- Warsztat: Kubuntu, PhpStorm, Opera
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 0 Dołączył: 28.09.2003 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Ja zamiast dziedziczenie poprostu przeslylalbym instancje potrzebnych klas do klasy News czy Forum, poprostu:
Najlepsze jest to, ze operujesz na tym samym obiekcie, a w nim masz uchwyt do polaczenia z baza, liczbe wykonanych zapytan itp. Zreszta gdyby np News dziedziczylo po Db, to w konstruktorze News musialbys podac parametry bazy danych - gdybys chcial dodac jeszcze obsluge bledow czy inputa to to juz nie jest zbyt elastyczne ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 12.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Hmm, to ostatnie jest niezłe.
Popróbuję, dzięki ![]() -------------------- pozdrawiam
Krzysiek |
|
|
![]() ![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 562 Pomógł: 15 Dołączył: 8.08.2003 Skąd: Denmark/Odense Ostrzeżenie: (0%) ![]() ![]() |
Cytat(M4chu @ 2004-09-22 18:12:45)
zamiast przesylac referencje i zapisywac obiekt db w atrybucie (co zdaje sie zajmuje duzo pamieci) mozesz po prostu napisac w kazdej metodzie
-------------------- Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 12.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Można zdefiniować zmienną globalną, ale ja osobiście takich zmiennych nie lubię. IMHO są po prostu niebezpieczne.
-------------------- pozdrawiam
Krzysiek |
|
|
![]() ![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 562 Pomógł: 15 Dołączył: 8.08.2003 Skąd: Denmark/Odense Ostrzeżenie: (0%) ![]() ![]() |
w jakim sensie niebezpieczne? chodzi ci o powtarzanie sie nazw zmiennych, czy o cos innego?
-------------------- Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 12.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(M4chu @ 2004-09-22 19:12:45) Ja zamiast dziedziczenie poprostu przeslylalbym instancje potrzebnych klas do klasy News czy Forum Wyglądało nieźle, ale albo coś pomijam albo niestety nie działa ![]() -------------------- pozdrawiam
Krzysiek |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 166 Pomógł: 0 Dołączył: 1.04.2004 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Cytat(yeti @ 2004-09-24 00:14:16) Wyglądało nieźle, ale albo coś pomijam albo niestety nie działa ![]() To co napisał M4chu działa bez problemów w php5 gdzie obiekty zawsze przesyłane są przez uchwyt, a nie kopiowane. W php4 ten kod powinien wyglądać jakoś tak:
-------------------- Nigdy nie kłóć się z głupim, ludzie mogą nie dostrzec różnicy.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 222 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat(bregovic @ 2004-09-22 19:11:49) zamiast przesylac referencje i zapisywac obiekt db w atrybucie (co zdaje sie zajmuje duzo pamieci) mozesz po prostu napisac w kazdej metodzie
Tu się nie zgodze. Odniesienie się do zmiennej zapisanej wewnątrz obiektu jest kilkakrotnie szybsze niż odnoszenie się do zmiennych globalnych. A leśli chodzi o zasoby to chyba oba rozwiązania zjadają podobną ilość. -------------------- pozdrawiam, chfast
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 0 Dołączył: 28.09.2003 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(chfast @ 2004-09-24 09:22:01) A leśli chodzi o zasoby to chyba oba rozwiązania zjadają podobną ilość. Wiec jak to lepiej zrobic? ![]() Wiem, ze mozna jeszcze kozystac ze statycznej zmiennej i funkcji np (php5) Ale jak to sie ma do wydajnosci? |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 602 Pomógł: 1 Dołączył: 3.04.2004 Skąd: Trójmiasto (Gdańsk) Ostrzeżenie: (0%) ![]() ![]() |
M4chu - to co piszesz to singletony a więc rozwiązanie szeroko stosowane właśnie w tekich przypadkach
generalnie można używać albo zmiennych globalnych albo singletonów, ale przy programowaniu obiektowym używanie zmiennych globalnych jest po prostu mało eleganckie -------------------- |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 12.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(bregovic @ 2004-09-22 21:35:21) w jakim sensie niebezpieczne? chodzi ci o powtarzanie sie nazw zmiennych, czy o cos innego? Chodzi mi o to, że w pewnym sensie tracisz kontrolę nad zmienna. Wolę wiedzieć gdzie zmienna się kończy, a gdzie zaczyna. Korzystam z tablic globalnych i to mi wystarcza. A poza tym, jak to napisano powyżej, to nie jest zbyt eleganckie ![]() A oto i rozwiązanie problemu:
Ten post edytował yeti 24.09.2004, 20:34:36 -------------------- pozdrawiam
Krzysiek |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 19.10.2004 Skąd: Opole Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Yarecki @ 2004-09-24 04:21:38)
Testowalem to rozwiazanie. Zamiast &objDb nalezy wstawic & $objDb, ponieważ interpreter PHP4 zwraca błąd parsowania. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 12.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(ShaXbee @ 2004-10-21 17:17:14) Cytat(Yarecki @ 2004-09-24 04:21:38) Testowalem to rozwiazanie. Zamiast &objDb nalezy wstawic & $objDb, ponieważ interpreter PHP4 zwraca błąd parsowania. hehe, a co ja napisałem powyżej ![]() -------------------- pozdrawiam
Krzysiek |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 16.06.2025 - 23:22 |