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:
<?php class Wpis { var $id; var $nick; var $ip; var $tresc; function NowyWpisID($id){ } function NowyWpis($nick, $ip, $tresc){ } function UsunWpis(){ } function AktywujWpis(){ } function PobierzTresc(){ } } class Ksiega extends Wpis { function PobierzIDsWpisow(){ } function PobierzIDsNieaktywnych(){ } } ?>
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.