Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]PHP OOP
Forum PHP.pl > Forum > Przedszkole
kamilus67
Cześć, uczę się z książek, kursów i tutoriali programowania PHP jak i front-end. Dążę do full stacka, więc pracy przede mną bardzo dużo, ale idzie mi w mojej ocenie całkiem dobrze.
Wkroczyłem wreszcie w etap obiektów w PHP. Na początku nie za bardzo rozumiałem o co z tym chodzi, ale powoli zaczynam chyba łapać. Piszę otóż chcę się upewnić, czy w prawidłowy sposób używam obiektów.

Napisałem prosty programik przyjmujący i wyświetlający dane. Schemat działania na zasadzie (pomijając wszystkie mechanizmy) rejestracji użytkownika, a później wyświetlenia jego danych. Funkcjonalność ograniczyłem do minimum, aby nie skupiać się na tym co nieistotne, dlatego dane wprowadzam z GETa.
Programik na potrzeby ćwiczeń z obiektów, więc też nie musicie zwracać uwag na względy bezpieczeństwa danych z GETa.

Po tym wywodzie jeszcze raz zadam pytanie, aby była pewność o co mi chodzi.. tongue.gif Czy ten schemat odpowiada programowaniu obiektowemu? Czy o to w obiektach chodzi? Albo czy zrobiłem coś do czego bez sensu używać obiekty.

Z góry dziękuję za pomocne wypowiedzi wink.gif

  1. <?php
  2.  
  3. class uzytkownik
  4. {
  5. private $imie;
  6. private $nazwisko;
  7. private $data_urodzenia;
  8. private $miejscowosc;
  9.  
  10. function __construct($imie, $nazwisko, $data_urodzenia, $miejscowosc)
  11. {
  12. $this->imie = $imie;
  13. $this->nazwisko = $nazwisko;
  14. $this->data_urodzenia = $data_urodzenia;
  15. $this->miejscowosc = $miejscowosc;
  16. }
  17.  
  18. function getDane()
  19. {
  20. if ($this->imie and $this->nazwisko and $this->data_urodzenia and $this->miejscowosc)
  21. {
  22. return '<h2>Dane poprawnie dodane do programu!</h2>';
  23. }
  24. else
  25. {
  26. return '<h2>Brak danych o użytkowniku!</h2>';
  27. }
  28. }
  29.  
  30. function uzytkownik()
  31. {
  32. if ($this->imie and $this->nazwisko and $this->data_urodzenia and $this->miejscowosc)
  33. {
  34. echo 'Dane użytkownika:<br>Imię: <b>'.$this->imie.'</b><br>
  35. Nazwisko: <b>'.$this->nazwisko.'</b><br>
  36. Data urodzenia: <b>'.$this->data_urodzenia.'</b><br>
  37. Miejscowość urodzenia: <b>'.$this->miejscowosc.'</b>';
  38. }
  39. else
  40. {
  41. echo '<h2>Brak danych o użytkowniku!</h2>';
  42. }
  43. }
  44. }
  45.  
  46. $uzytkownik['imie'] = $_GET['imie'];
  47. $uzytkownik['nazwisko'] = $_GET['nazwisko'];
  48. $uzytkownik['data'] = $_GET['data'];
  49. $uzytkownik['miejscowosc'] = $_GET['miejscowosc'];
  50.  
  51. $rejestracja = new uzytkownik($uzytkownik['imie'], $uzytkownik['nazwisko'], $uzytkownik['data'], $uzytkownik['miejscowosc']);
  52.  
  53. echo $rejestracja->getDane();
  54.  
  55. if ($rejestracja->getDane() == '<h2>Dane poprawnie dodane do programu!</h2>')
  56. {
  57. $rejestracja->uzytkownik();
  58. }
  59.  
  60. ?>
nospor
Cytat
if ($rejestracja->getDane() == '<h2>Dane poprawnie dodane do programu!</h2>')

Alc....

Obiekty z reguly nie zwracaja komunikatow a juz na pewno nie w stylach html i na pewno nie tak dlugie wink.gif

Nie bardzo rozumiem po co ci funkcja getdane() skoro getuzytkwnik() ja nie jako powiela.
W ogole powinna byc tylko jedna funkcja getAllData() ktora zwroci tablice z danymi usera lub NULL lub rzuci wyjatkiem, gdy dane usera nie sa ustawione.
Zas za wyswietlanie danych to powinien odpowiadac widok/szablon a nie obiekt usera. Obiekty z reguly nie maja nic do wyswietlania.
viking
To co tu przedstawiłeś (czyli klasa użytkownik, która w połączeniu z PSR-4 powinna być raczej Uzytkownik) jest częścią logiki biznesowej i jest tak zwaną encją (entity). Zazwyczaj encje mapują dane ze źródeł danych czyli np tabeli w bazie. Zawiera głównie settery/gettery chociaż niektórzy dają tutaj też walidację danych. Dodatkowo stosuj zawsze modyfikatory widoczności.

  1. class Uzytkownik
  2. {
  3. protected $dataUrodzenia;
  4. protected $wiek;
  5.  
  6. public function getDataUrodzenia() {
  7. return $this->dataUrodzenia;
  8. }
  9.  
  10. public function setDataUrodzenia(\DateTime $data) { // można przekazać obiekt DateTime
  11. $this->dataUrodzenia = $data;
  12. return $this;
  13. }
  14.  
  15. // z walidacją danych
  16. public function setWiek($wiek) {
  17. if ($wiek < 15 || $wiek > 130) {
  18. throw new InvalidArgumentException('Wiek musi być w zakresie 15 - 130 lat');
  19. }
  20. $this->wiek = $wiek;
  21. return $this;
  22. }
  23. }
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.