Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Programowanie Obiektowe
Forum PHP.pl > Forum > PHP
Oczko21
Witam,
Napisalem moj pierwszy skrypt z wykorzystaniem programowania obiektowego i chcialbym spytac czy to o cos takiego chodzi w programowaniu obiektowym, gdyz w wielu ksiazkach model projektowania obiektowego jest przedstawiany za pomoca zwierzat, pojazdow itp. Niestety jeszcze nie zdolalem wyksztalcic sobie wyobrazni do takiego stopnia aby model zwierzat przelozyc na model chociazby formularza sluzacego do kontaktu uzytkownika strony z jej wlascicielem.

  1. include"klasa_db.php";
  2.  
  3. class Kontakt
  4. {
  5. public $formularz = array(email => '', temat => '', tresc => '');
  6. public $wiadomosc;
  7. public $ip;
  8.  
  9. public function Zapisz()
  10. {
  11. $this->ip = $_SERVER['REMOTE_ADDR'];
  12. $db = new BazaDanych;
  13. $query="INSERT into wiadomosci (Email, Tytul, Tresc, Data, IP) VALUES('".$this->formularz['email']."', '".$this->formularz['temat']."', '".$this->formularz['tresc']."', NOW(), '$this->ip')";
  14. $db->db($query);
  15. $this->wiadomosc = 'Wszystko poszlo elegancko.';
  16. }
  17. public function SprawdzFormularz()
  18. {
  19. if(isset($_POST['email']) && isset($_POST['temat']) && isset($_POST['tresc']))
  20. {
  21. $this->formularz['email'] = addslashes($_POST['email']);
  22. $this->formularz['temat'] = addslashes($_POST['temat']);
  23. $this->formularz['tresc'] = addslashes($_POST['tresc']);
  24. $this->Zapisz();
  25. }else{
  26. $this->wiadomosc = 'Nie wypełniłeś wszystkich pól formularza.';
  27. }
  28. }
  29. }
  30.  
  31. if(isset($_POST['wyslij']))
  32. {
  33. $b = new Kontakt;
  34. $b->SprawdzFormularz();
  35. echo $b->wiadomosc;
  36. }
  37.  


  1. <form method="post" action="">
  2. <input type="text" name="email" /><br />
  3. <input type="text" name="temat" /><br />
  4. <textarea name="tresc"></textarea><br />
  5. <input type="submit" name="wyslij" value="Wyslij" />
  6. </form>


Skrypt dziala poprawnie, prosze jedynie o zwrocenie mi uwagi w kwesti bledow ktore popelnilem. Jak wspomnialem na poczatku dopiero zaglebiam sie w tajniki programowania obiektowego i chcialbym nauczyc sie go poprawnie, dlatego prosze wytykac bledy, nawet najdrobniejsze, nie chce wyrobic sobie zlych nawykow zaraz z poczatku.
greycoffey
Ogółem połączyłeś model, widok i kontroler w jedno.
  • Metoda SprawdzFormularz
    • Właścicwie walidacją danych powinna się zajmować inna klasa - zasada jednej odpowiedzialności.
    • Dane pobierasz z określonych pół, do tego przez POST. Powinny być przekazywane przez argumenty metody, albo przekazywane w konstruktorze klasy. W OOP ważna jest przenośność. Co z tego, jak nie będziesz mógł zastosować tej klasy dla dwóch różnych formularzy?
  • Metoda Zapisz
    • Startujesz nowe połączenie z bazą danych. Jest trochę nieefektywnie startować za każdym razem nowe. Poczytaj o Dependency Injection Container, Singletonie czy Rejestrze.
  • Ogół klasy
    • Klasa służy do kontaktu. Pomyśl, że chcesz zrobić klasę do kontaktu od zapisywania do bazy danych wiadomości, po mail, irc czy GG, tak, by móc je stosować zmieniając tylko linijkę w tekście. Niech potem wszystkie klasy służące do poszczególnych form kontaktu - Kontakt_Email, Kontakt_Baza, Kontakt_Irc implementują interfejs RodzajKontaktu, a potem przekazywać ich instancje do konstruktora, z określeniem implementowanego interfejsu, przez co powstanie jednolita i wspólna droga komunikacji. Ale tutaj wybiegłem poza ramy tego projektu. Generalnie ucz się, czytaj o OOP, zapoznawaj się z wzorcami projektowymi, podpatrzaj u frameworków jak to jest zrobione i pisz, pisz i pisz.
Oczko21
Dzieki, wezme sobie te rady do serca i postaram sie to zmienic. Zapytam tylko czy dobrze to rozumiem:
Mam zrobic 2 klasy. Jedna do walidacji formularzy, a druga do zapisywania.
W pierwszym maja byc rozne metody, odnoszace sie do sprawdzania roznych formularzy, a w drugim metody odnoszace sie do zapisy sprawdzanych formularzy i wartosci mam przekazywac przez argumenty tych metod tak?
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.