Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Programowanie obiektowe
Forum PHP.pl > Forum > Przedszkole
neo1986kk
Witam, tak siedze w tym programowaniu strukturalnym i nie moge wyjsc za bardzo bo w necie jest ciężko o jakiś porządny opis, mam pytanie czy jesli sie lacze z baza to takie programowanie obiektowe jest dobrym rozwiązaniem?
powiedzmy że robie spis książek i mam w bazie cos w tym stylu

baza ksiazki

id tytul autor user
1 a aaa 1
2 b bbb 1
3 c ccc 2

baza wypozyczone
id idksiazki rokwyporzyczenia
1 1 2010
2 3 2011

i chce na stronie zrobic takie okienka KSIAZKI WYPOZYCZONE, KSIAZKI NIE WYPOZYCZONE, WSZYSTKIE, WYPOZYCZONE W ROKU 2010, WYPOZYCZONE W ROKU 2011

to tera po kolei:
  1.  
  2. class ksiazki //tworze klase ksiazki
  3. {
  4. public $user
  5.  
  6. //i co i teraz po kolei funkcje??
  7.  
  8. function wypozyczone($user)
  9. {
  10. select * from ksiazki where id=user
  11. //mam id ksiazki
  12. select * from wypozyczone
  13. return wypozyczone
  14. }
  15.  
  16. function niewypozyczone($user)
  17. {
  18. select * from ksiazki where id=user
  19. //mam id ksiazki
  20. select * from wypozyczone
  21. return wypozyczone
  22. }
  23.  
  24. function wypozyczone($user)
  25. {
  26. select * from ksiazki
  27. return ksiazki
  28. }
  29. //itd itd??
  30. }
  31. ..


wiem ze przyklad z ksiazki to troche nie w ten czas, ale mniejwiecej o to chodzi, ale w takim wypadku nie potrzbuje klasy ani obiektow tylko same funkcje spokojnie wystarcza

Jesli ktos ma chwile czasu i moze mi wytlumaczyc po co tak wlasciwie to programowanie obiektowe, albo zna jakies strony gdzie bedzie rozwiniety jakis przyklad ktory jest naprawde godny uwagi , nie chodzi mi o zapalanie lampy czy ustawianie imion ludzi tylko cos co mi naprawde pokaze ze programowanie obiektowe przyspiesza prace a przy okazji sie tego naucze.

Pozdrawiam
ylk
Programowanie obiektowe polega na niwelowaniu konieczności powtarzania kodu w wielu miejscach, ułatwia panowanie nad i rozbudowę skryptu. W zasadzie programistów PHP można podzielić na 2 grupy: tych, którzy programują obiektowo i tych, którzy dopiero zaczną.

Sęk w tym, że na prostych przykładach w sieci ciężko jest zrozumieć samą ideę, bo te przykłady są... za proste. Dobroć programowania obiektowego widać dopiero przy większych projektach.
Jak zrobisz kiedyś coś większego proceduralnie, to zrozumiesz w pewnym momencie, że ciężko ci nad tym zapanować i wtedy z pomocą przyjdą obiekty.

Generalnie chodzi o to, aby grupować pewne funkcjonalności systemu. Każdy system ma użytkowników, więc do ich obsługi można stosować odrębną klasę. Każda klasa ma właściwości (zmienne charakteryzujące daną klasę) oraz metody (funkcje), czyli czynności, które można wykonać na obiekcie tej klasy. Weźmy klasę User. Użytkownik ma dane osobowe, może się zalogować, wylogować i można sprawdzić jakie ma uprawnienia:
  1. class User
  2. {
  3. // id usera i jego dane
  4. private $id,$data;
  5.  
  6. // konstruktor klasy, który pobiera id i na jego podstawie dane z bazy
  7. function __construct($id=null)
  8. {
  9. $this->id=$id;
  10. if ($this->id) $this->data=q("SELECT * FROM user WHERE id=$this->id");
  11. }
  12.  
  13. function login($login,$pass)
  14. {
  15. //(...)
  16. }
  17.  
  18. function logout()
  19. {
  20. //(...)
  21. }
  22.  
  23. function checkPerms()
  24. {
  25. //(...)
  26. return $perms;
  27. }
  28. }


Teraz w każdym miejscu systemu będzie można utworzyć nowy obiekt tej klasy ($u=new User()) i sobie na nim operować. Chodzi o to, że tworzysz sobie pewne metody, a potem już je tylko wywołujesz gdzieś w skrypcie nie powielając kodu. Przy okazji wszystko masz pogrupowane i jak się coś sypie to dużo łatwiej jest to wybadać.
emajl22
a ja mam pytanie

piszę sobie coś obiektowo i mój index wygląda mniej więcej tak:
  1. // gora
  2. <?php
  3. require_once('./silnik.php');
  4. $api = new API;
  5.  
  6. $api->doContent($cos);
  7. ?>
  8. //dol

i teraz pytanie - dobrze to jest napisane? chodzi mi o samą logikę aplikacji...

klasa silnik.php wygląda tak:
  1. class API {
  2.  
  3. public function __construct() {
  4. // laczenie z baza
  5. // doklejanie innych klas i ich inicjowanie
  6. }
  7.  
  8. public function doContent($param) {
  9. switch($this->protect($param))) {
  10. case 'rejestracja':
  11. include('./class/rejestracja.class.php');
  12. break;
  13. case 'kontakt':
  14. include('./views/kontakt.php');
  15. break;
  16. default:
  17. if (isset($_SESSION['cos']))
  18. // zalogowany
  19. else
  20. include('./views/default.php');
  21. break;
  22. }
  23. }
  24.  
  25. public function protect($co) {
  26.  
  27. // zabezpieczanie danych z formularzy, getow itd
  28. return $co;
  29.  
  30. }
  31. }

w dobrym ide kierunku?
neo1986kk
Cytat(ylk @ 12.02.2011, 18:19:31 ) *
Jak zrobisz kiedyś coś większego proceduralnie, to zrozumiesz w pewnym momencie, że ciężko ci nad tym zapanować


no właśnie to zrobiłem i juz sie pogubiłem moj serwis ma ponad 400 plików napisanych proceduralnie i robię nowy, chciałem wejść w obiekty, ale wątpie zebym znalazł czas, aby się tego nauczyć... niestety wszystko trzeba robic szybko i nie ma czasu na eksperymenty.

ale reasumująć jeśli robię profil uzyktownika, gdzie dane bedą używane tylko na stronie profil.php to chyba nie ma co tam ładować specjalnie obiektów, oprócz tych stworzonych na caly system czyli właśnie logowanie uzytkowników na przykład?


W przykladowym skrypcie po $this->data(mysql) zwraca tablice odrazu czy trzeba tam pisac
  1. while($row=mysql_fetch_array)........?
ylk
a moje serwisy mają tylko 1 plik, który daje się otworzyc z zewnatrz (index.php), reszta to dolaczane klasy. zobacz o ile lepsze to rozwiązanie chociażby w kwestii bezpieczeństwa systemu.
neo1986kk
napewno masz racje, ale narazie dla mnie to nie pojete zeby wszystko zmiescic w jednym pliku, ale mam nadzieje ze w koncu sie naucze, jak nie sam to sie zapisze na jakies szkolenie czy cos hehe
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.