![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 4.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Jako ze jestem poczatkujacy w sprawach programowania obiektowego mam pare pytan, na ktore chcialbym poznac odpowiedzi. Chyba dobrze trafilem;). Na wstepie zaznacze, ze wszystko o co bede pytal dotyczy PHP4 nie PHP5. Zaczynamy... Przegladalem duzo skryptow opartych o OOP, troche sie naczytalem i troche mnie to wszystko teraz zastanawia. Glownym zalozeniem chyba jest poklasyfikowanie czynnosci jakie ma wykonac aplikacja, powiazanie ich miedzy soba itd. W wiekszosci widzialem poprostu wrzucone do jednego wora funkcje, zwracajace jakies tam wartosci, zupelnie bez ladu i skladu. Raczej nie o to w tym chodzi prawda? Zalozmy, ze chcemy stworzyc aplikacje do obslugi ksiegi gosci. Nie wiem czy dobrze rozumuje idee programowania obiektowego, ale mniej wiecej zrobilbym cos takiego:
itd. Zakldam, ze rozumuje poprawnie. Teraz pytanie: Metoda PobierzIDsWpisow pobierze mi z bazy danych IDs wszystkich wpisow. Lepiej, zeby zwracala ona wyniki tego zapytania czy pobierala zawartosc poszczegolnych wpisow przez NowyWpisID(pobrane_id), PobierzTresc() i zwracala je jako wynik. Zazwyczaj nie wiem, czy takie rzeczy powinny dziac sie wewnatrz metody, czy poza nia. Czyli np. metoda zwraca mi tablice z IDs, poza klasa pobieram zawartosci poszczegolnych wpisow przez NowyWpisID(id_z_tablicy), PobierzTresc. Oczywiscie jesli cos jest nie tak na tym etapie to prosze o komentarz. Czego nie rozumiem i co moglbym poprawic (najlepiej z wyjasnieniem dlaczego etc.). Jak Wy byscie rozwiazali stworzenie takiej klasy/klas? Jesli moge prosic o przyklady...? Druga sprawa dotyczy klasy do obslugi bazy danych. Zalozmy ze mam prosta klase z paroma metodami do obslugi podstawowych operacji na bazie danych. Teoretycznie, za kazdym razem powinienem sie rozlaczyc z baza danych. Czy jest cos w stylu "destruktora", by nie musiec za kazdym razem po stworzeniu nowego obiektu ($objSmth=new Smth() ![]() Powrocmy do klasy Wpis. Zalozmy, ze chce by dzialala ona w oparciu o klase do obslugi bazy danych. Deklarujemy, ze klasa Baza_danych jest klasa nadrzedna i teraz pytanie o konstruktor klasy Wpis. Teoretycznie powinienem pobierac w nim takie rzeczy jak: host, nazwa uzytkownika, haslo, nazwa bazy danych? Jest to troche uciazliwe. Zawsze musze pobierac w konstruktorze klasy, parametry niezbedne do odpalenia klasy rodzica? Jak wygladaloby utworzenie klasy Wpisz na podstawie klasy Bazy danych a nastepnie klasy Ksiega na podstawie klasy Wpis? Konkretnie chodzi mi o konstruktory i przekazywanie danych miedzy klasami. Wewnatrz konstruktora tworze nowy obiekt klasy do obslugi bazy danych. Jak odwolywac sie do metod tej klasy? Np. $this->Zapytanie("..."); czy np. $this->db->Zapytanie("...") ? Czyli np. trzowrzyc dodatkowa zmienna wewnatrz klasy, ktora przechowuje "uchwyt" do obiektu klasu bazy danych? W dalszym ciagu bede musial rozlaczac sie recznie np. przez wywolanie $objSmth->db->Close() ?;/ Kolejna rzecz dotyczy nazewnictwa metod wewnatrz klasy. Nazwy te moga sie powtarzac. Jak wiec najlepiej nazywac metody klasy? Moze jakis przedrostek zawierajacy nazwe klasy a pozniej np. nazwe metody? (Wiem, ze mozna odwolac sie do metod poszczegolnych klas, nawet gdy ich nazwy sa identyczne). Np. $objSmth->SmthQuery(); albo $objDb->DbQuery(). Sprawdzanie poprawnosci danych, np. wpisanego adresu email to zadanie metody danej klasy (i zwracanie true lub false w przypadku wystapienia bledu), czy mechanizmu wywolujacego ta metode poza obiektem? Zalozmy, ze korzystam z systemu szablonow Smarty. Przekazywanie danych do szablonu to kwestia osobnego mechanizmu (skrypt pobiera wszystkie dane potrzebne do wyswietlenia strony, obrabia je tworzy nowy obiekt i wyswietla strone), czy wszystkie obiekty musza byc ze soba powiazane, w tym rowniez z obiektem Smarty. Sory, ze troche tego duzo wyszlo i tak chaotycznie napisanego, ale mam nadzieje, ze ktos pomoze mi zrozumiec OOP. Jak pisalem wyzej, troche sie juz naogladalem, ale ludzi robia sobie worki na funkcje z klas a mi nie o to chodzi. Wyszlo tez troche pytan o klase do obslugi bazy danych bo wiekszosc przykladow jakie widzialem nie byla o taka oparta a jedynie miala zywcem wpisane polecenia obslugi mysql'a. Pozdrawiam i licze na pomoc. Jak sobie cos przypome to dopisze. Ten post edytował ppprn 3.03.2005, 23:21:56 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
2. Destruktory są tylko w php5. Prawda jest taka, że php sam kończy połączenia
3. Poczytaj o Singletonie 4. Takie same nazwy metod nic nie powodują ![]() ![]() -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 0 Dołączył: 28.09.2003 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy jest sens robienia klasy Wpis, bo czym bedzie $Wpis po wywolaniu metody $Wpis->usun()?
![]() Nie widze sensu dziedziczenia po klase bazy danych - uzyj jej instancji w klasie ksiegi i po sprawie. Btw nie widze problemu z tym rozlaczaniem - na poczatku skryptu tworzysz instancje klasy bazy, laczysz sie z nia, a na koncu rozlaczasz, w czym problem? Co do sprawdzenia poprawnosci to jak chcesz, jak to bedzie cos popularnego np walidacja emaila to nie ma sensu powielac w kazdej klasie, trzymaj metody walidujace w jednym pliku i w razie potrzeby go zalaczaj. Co do szablonow... ja to robie tak, w konstruktorze tworze sobie instancje klasy szablonu, w metodzie (np pobierzWgId) pobieram dane i poprostu przekazuje je do szablonu. @Vengeance: w php4 mozna bylo symulowac ![]() Ten post edytował M4chu 4.03.2005, 00:00:11 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 12.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
szukam pomocy z php e-mail lezalak@gazeta.pl
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 134 Pomógł: 0 Dołączył: 27.01.2005 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
@M4chu - a jaki sens jest symulować destruktory w php4? To strasznie spowalnia czas wykonania...
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 02:46 |