Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Podstawy obiektówki
Forum PHP.pl > Forum > Przedszkole
maxx000
Witajcie serdecznie.

Jako, że ciągle próbuję walczyć z programowaniem obiektowym w PHP i chęcią rozgryzienia tego tematu, dziś napisałem jakiś prosty skrypt a'la rejestracja.

Ogółem działa, przy prosiłbym doświadczonych użytkowników o krytykę i ewentualne poprawki - no chyba, że całość jest nie w ten deseń, jaki być powinno.

Z góry dziękuję.

Poniżej kody z dwóch plików, które napisałem:
Plik z klasą:
  1. <?php
  2. $db=mysql_connect("localhost", "root", "krasnal");
  3. $db_sel = mysql_select_db("projekt");
  4.  
  5. function oczysc($zmienna)
  6. {
  7. $zmienna = strip_tags(trim($zmienna));
  8. return $zmienna;
  9. }
  10. ################################ KLASY
  11. class Rejestr
  12. {
  13. public function form($login, $email)
  14.  
  15. {
  16. echo '
  17. <form action="" method="post">
  18. Login:<input type="text" name="login" value='.$login.'><br>
  19. Hasło:<input type="password" name="pass"><br>
  20. Potwierdź hasło:<input type="password" name="repass"><br>
  21. E-mail:<input type="password" name="email" value='.$email.'><br>
  22. <input type="submit" name="rejestr" value="Rejestruj">
  23. </form>
  24. ';
  25. }
  26.  
  27.  
  28. public function sprawdz($login, $pass, $repass, $email)
  29. {
  30. $login=oczysc($login);// czy tego jakoś kurcze nie mozna
  31. $pass=oczysc($pass); // zautomatyzowac? :-)
  32. $repass=oczysc($repass); // jakis 'myk' ze wszystkie przekazane dane
  33. $email=oczysc($email); // filtrujemy przez oczysc
  34.  
  35.  
  36. $zap=mysql_query("Select id from uzytkownik where login='$login'");
  37. if((mysql_num_rows($zap)>0) || (strlen($login)<3))
  38. {
  39. $blad .= "- Login zajęty, lub podano za krótki.<br>";
  40. }
  41.  
  42.  
  43. $zap=mysql_query("Select id from uzytkownik where email='$email'");
  44. if((mysql_num_rows($zap)>0))
  45. {
  46. $blad .= "- E-mail już zarejestrowany, lub podano niepoprawny.<br>";
  47. }
  48.  
  49. if(($pass!=$repass) || (strlen($pass))<4)
  50. {
  51. $blad .= "- Błąd przy podawaniu hasła.<br>";
  52. }
  53.  
  54. if(!empty($blad))
  55. {
  56. echo $blad;
  57. $this->form(oczysc($login), oczysc($email));
  58. }
  59. else
  60. echo 'Zarejestrowano poprawnie!';
  61. // mysql_query -> dodawanie uzytkownika
  62.  
  63.  
  64. }
  65.  
  66. }
  67. ?>



Oraz plik główny:
  1. <?php
  2. include_once('klasy.php');
  3. $rejestruj = new Rejestr();
  4.  
  5.  
  6.  
  7. if($_SERVER['REQUEST_METHOD']=="POST")
  8. {
  9. if(isset($_POST['rejestr']))
  10. {
  11. $rejestruj->sprawdz($_POST['login'], $_POST['pass'], $_POST['repass'], $_POST['email']);
  12.  
  13. }
  14.  
  15. }
  16. else
  17. {
  18.  
  19.  
  20. $rejestruj->form(oczysc($login), oczysc($email));
  21. }
  22.  
  23.  
  24.  
  25. ?>
Fifi209
Zwykle funkcję zamknięte w klasie, nie ma tutaj o czym pisać.

Co do obiektówki, możesz generować html w klasie, ale w Twoim przypadku mógłby być statyczny w innym pliku. Funkcje nie powinny niczego wyświetlać a jedynie zwracać pewne wartości.
maxx000
Czyli jednym słowem, oprócz słowa class, to za dużo nie ma wspólnego z obiektówką?
Fifi209
Cytat(maxx000 @ 12.10.2010, 11:28:09 ) *
Czyli jednym słowem, oprócz słowa class, to za dużo nie ma wspólnego z obiektówką?

A i owszem.

Ja klasę definiuję jako coś co ma pewne właściwości i można wykonywać na tym jakieś operacje, weźmy dla przykładu klasę: kot

Kot przechowuje pewne właściwości, zmienne i stałe.
Stałymi będą np. rasa, płeć
Zmiennymi: waga, wzrost, kolor sierści (z biegiem czasu się zmienia) etc.

A teraz funkcje, które możemy wykonywać na obiekcie "kot" (czyli mamy już konkretnego kotka)
np. karmienie, usypianie, zabawa

i funkcje prywatne, które będą wykonywały się automatycznie przy wykonaniu innych funkcji np. :
po użyciu funkcji: karmienie uruchamiamy automatycznie np. tycie, trawienie (bo bez karmienia nie można)


No i to tak w skrócie ode mnie. winksmiley.jpg

Trafiło na kota, bo akurat mnie zaczepiał przy pisaniu. ;p
Crozin
Skoro to początki obiektówki to zapamiętaj sobie: podstawą OOP jest obiekt, nie klasa - podobnie jak podstawą budownictwa są budynki, nie ich plany/szkice. Dlatego na swój kod patrz przez pryzmat jego interfejsu, a nie implementacji.
Jedna z podstawowych zasad to tworzenie obiektów, które zajmują się jednym konkretnym zagadnieniem, czyli przykładowo: walidacja danych, obsługa błędów w formularzu, sam formularz, zapisanie użytkownika - to wszystko to osobne obiekty.

btw: jest 2010 rok, funkcje mysql_*() już naprawdę powinny odejść w niepamięć. PDO może i cudem nie jest, ale w porównaniu do pierwszego... deklasuje.
maxx000
Witam.

Dziękuję za odpowiedzi i chęci zobrazowania sprawy.

Nie ukrywam, że trochę już przeczytałem o obiektówce, gorzej z "wdrożeniem" tej wiedzy.

Może odwrócę trochę sprawę i napiszę co chcę uzyskać - obiektowo, bo strukturalnie to już działa.

W bardzo uproszczonej formie wyglądałoby to tak - ma być to strona radia internetowego, a w niej:
- użytkownik strony, który może:
* zarejestrować się
- przy rejestracji walidacja danych
* pisać pozdrowienia / zamówienia
* może edytować swoje dane

- od strony zarządzania stroną
* przyjmować pozdrowienia i przenosić do archiwum
* edytować użytkowników

Jeżeli możecie podpowiedzieć mi, jak to zrobić obiektowo, będę wdzięczny.

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.