Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> prawidlowe OOP , struktura klasy, Jak wedlug koncepcji OOP napisac dobra klase
rahul
post 20.08.2011, 20:43:29
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 5.03.2011

Ostrzeżenie: (0%)
-----


Witam
Temat pewnie wam znany i stary jak swiat. Pisze sobie swoj cms starajac sie zrobic to obiektowo. Dotychczas przejrzalem i przeczytalem wiele artykulow dotyczacych OOP i robie sie coraz glupszy bo z tego co rozumie to zastosowan jest multum, tylko ktore to najlepsze. mam taka klase

  1. include_once('db/db.php');
  2. class User
  3. {
  4. private $user_id;
  5. private $first_name;
  6. private $last_name;
  7. private $login;
  8. private $password;
  9. private $email;
  10. private $ip;
  11. private $user_role;
  12. private $registration_date;
  13. private $db;
  14.  
  15. function __construct()
  16. {
  17. $this->db = Database::getInstance();
  18. }
  19.  
  20. function setLogin($login)
  21. {
  22. $this->login = $login;
  23. }
  24.  
  25. function setPassword($password)
  26. {
  27. $this->password = $password;
  28. }
  29.  
  30. function setFirstName($firstName)
  31. {
  32. $this->firstName = $firstName;
  33. }
  34.  
  35. function setLastName($lastName)
  36. {
  37. $this->lastName = $lastName;
  38. }
  39.  
  40. function setEmail($email)
  41. {
  42. $this->email = $email;
  43. }
  44.  
  45. function setUserRole($role)
  46. {
  47. $this->role = $role;
  48. }
  49.  
  50. function setRegistrationDate($registration_date)
  51. {
  52. $this->registration_date = $registration_date;
  53. }
  54.  
  55.  
  56. function login()
  57. {
  58. $action = $this->db->prepare("SELECT * from users WHERE login LIKE '$this->login'
  59. AND password LIKE '$this->password'");
  60. $action->execute();
  61. $result = $action->fetchAll();
  62. if(count($result)== 1)
  63. {
  64. if($result[0]['Role'] == 0)
  65. {
  66. $_SESSION['user_id'] = $result[0]['user_id'];
  67. return true;
  68. }else if($result[0]['Role'] == 1)
  69. {
  70. $_SESSION['user_id'] = $result[0]['user_id'];
  71. $_SESSION['admin'] = 'admin';
  72. header('location:admin.php');
  73. }
  74. }
  75. return false;
  76. }
  77.  
  78. function register()
  79. {
  80. $ip = $_SERVER['REMOTE_ADDR'];
  81. $action = $this->db->query( "INSERT into users(user_id , Login , Password , Name , LastName ,Email , Ip , Role , RegistrationDate)
  82. VALUES('' , '$this->login' ,'$this->password' , '$this->firstName' , '$this->lastName' , '$this->email' , '$ip' ,
  83. '$this->role' , NOW())");
  84. $action->execute();
  85. return true;
  86. }
  87.  
  88. function EditUser()
  89. {
  90. ...
  91. }
  92.  
  93. function ChangePassword()
  94. {
  95. ...
  96. }
  97. } // end of class.
  98. ?>


Pierwsze pytanie : Czy klasa User powinna miec funkcje takie jak Loguj, Rejestruj, Edytuj, Zmien Haslo i czy te funckje powinny miec juz "hardcoded" zapytania do bazy wewnatrz, patrz funckja loguj();. Wywoluje ja tak:

  1.  
  2. $user_c = new User();
  3. $user_c->setLogin($_POST['login']);
  4. $user_c->setPassword(md5($_POST['password']));
  5. $login = $user_c->login();


Jezeli cos tego pokroju jest ok to spoko. Teraz np dopisalem sobie taka funkcje to tej samej klasy, ktora jak dla mnie moglaby byc w kazdej prawie innej klasie :

  1. class User {
  2.  
  3. private $sqlObj;
  4. private $SqltableRows;
  5.  
  6. function query($query)
  7. {
  8. $sql = $this->db->query($query);
  9. $sql->execute();
  10. $this->sqlObj= $sql->fetchAll(PDO::FETCH_OBJ);
  11. $this->SqltableRows= $sql->fetch(PDO::FETCH_ASSOC);
  12. }
  13. }


Dzieki tej funkcji lapie sobie wszystko z bazy i w prosty sposob moge wywolywac wszystkie kolumny :
  1. $user_c = new User();
  2. $user_c->query("SELECT * FROM users");
  3. $users = $user_c->getObj();
  4. foreach ($users as $user)
  5. {
  6. echo $user->Name;
  7. echo $user->Password;
  8. }


Bardzo podoba mi sie mozliwosc poboru rekordow i nazw wierszy tabeli w tak prosty sposob. Teraz do rzeczy :
Funckja ta jest w Users ale generalnie moglaby byc w prawie kazdej innej klasie, np Products, Articles itp. Czy mam utworzyc osobna klase z ta funckja z ktorej jakos beda kozystac wszyskie inne klasy ? Czy ma byc to w klasie bazy danych, czy moze w jakies jeszcze innej ?

Prosze o odpowiedzi i wyrozumialosc smile.gif


Ten post edytował rahul 20.08.2011, 20:50:56
Go to the top of the page
+Quote Post

Posty w temacie
- rahul   prawidlowe OOP , struktura klasy   20.08.2011, 20:43:29
- - Noidea   CytatPierwsze pytanie : Czy klasa User powinna mie...   21.08.2011, 08:10:16
- - rahul   Dzieki za odpowiedz. Mam szereg nastepnych pytan....   21.08.2011, 10:43:14
- - Crozin   To z czym masz tutaj do czynienia to mapowanie obi...   21.08.2011, 13:10:42
- - rahul   CytatObiekty różnych typów zajmują się różnymi rze...   22.08.2011, 15:59:51
- - Crozin   1. Coś w ten deseń. Mając przykładowo obiekt User ...   22.08.2011, 17:00:00
- - rahul   Dzieki Crozin, szczegolnie za cierpliowac , tak so...   22.08.2011, 17:29:34
- - melkorm   OOP - sam miałem z tym wiele problemów na początku...   22.08.2011, 17:54:10
- - rahul   Taaaa... wlasnie pisze swojego cms'a po raz 2...   22.08.2011, 18:28:15
- - by_ikar   Zamiast tworzyć ileś tam tych seterów i geterów, m...   22.08.2011, 22:11:44
- - Crozin   @by_ikar: Zerowe wsparcie ze strony IDE czy narzęd...   22.08.2011, 22:50:44
- - by_ikar   Nie wiem z jakiego ID korzystasz, ale mój podpowia...   22.08.2011, 23:12:56
- - starach   Metody magiczne i po problemie. [PHP] pobierz, p...   22.08.2011, 23:17:38
- - Crozin   Mając 70 publicznych właściwości w obiekcie get*()...   22.08.2011, 23:25:43
- - melkorm   To jeżeli już tym torem idziemy to zrobić to jak m...   22.08.2011, 23:27:39
- - starach   Hmm, a możecie napisać co wy macie przeciwko tej m...   22.08.2011, 23:31:21
- - Crozin   A po co korzystać z metod magicznych skoro: [PHP] ...   22.08.2011, 23:53:50
- - starach   Jest jeden argument za tym żeby je właśnie stosowa...   23.08.2011, 01:06:16
- - Crozin   @starach: Pierwszy przykład to przykład poprawnie ...   23.08.2011, 02:14:01
- - melkorm   Jestem absolutnie za Crozin'em, wchodząc w źró...   23.08.2011, 02:51:29
- - by_ikar   CytatAle sam także jestem przeciwnikiem __set i __...   23.08.2011, 07:38:25
- - Noidea   @by_ikar Dyskusja o getterach i setterach wyszła o...   23.08.2011, 08:53:49
- - rahul   Rozumiem. Ze wzorca mvc poki co nie kozystam, to c...   23.08.2011, 09:20:07
- - by_ikar   KodDyskusja o getterach i setterach wyszła od klas...   23.08.2011, 09:24:43
- - melkorm   @by_ikar, to o czym mówisz to inna baja wtedy robi...   23.08.2011, 09:43:14
- - Crozin   @by_ikar: Pisałem to już wcześniej... temat jest o...   23.08.2011, 10:04:13
- - mike   ~by_ikar zainteresuj się takim pojęciem jak kohezj...   23.08.2011, 10:14:24
- - rahul   CytatOK, widzę że nie zrozumiałeś. Mając 70 public...   23.08.2011, 10:14:42
- - by_ikar   Kod@by_ikar: Pisałem to już wcześniej... temat...   23.08.2011, 10:31:38
- - rahul   Podsumowanie lekcji ... czyli co , bedzie to tak ...   23.08.2011, 18:39:35
- - starach   Blisko, nawet bardzo. Tylko getByUserId do drugiej...   23.08.2011, 19:06:56
- - rahul   no to klawo, mam nadzieje ze reszta mozgowcow tez ...   24.08.2011, 08:31:42
- - Crozin   1. Po co obiektowi User dostęp do bazy danych? Dla...   24.08.2011, 09:17:59
- - rahul   CytatPo co obiektowi User dostęp do bazy danych? D...   24.08.2011, 10:08:24
- - thek   A nie pomyślałeś, że UserManager poprzez zarządzan...   24.08.2011, 11:33:50
- - rahul   @thek - Czy zatem obiekt zwrocony z funckji UserMa...   24.08.2011, 12:02:00
- - Crozin   W skrócie:[PHP] pobierz, plaintext class User ...   24.08.2011, 13:04:55
- - thek   Pomyśl nad tym co chcesz osiągnąć... Jak dla mnie ...   24.08.2011, 13:09:08
- - melkorm   Jak najbardziej popieram wizję Thek'a, [PHP] ...   24.08.2011, 13:22:26
- - Crozin   @thek, @melkorm: Przy kodzie: $user = new Use...   24.08.2011, 13:41:42
- - rahul   @Crozin - No to takie cos napisalem, czyli nowy o...   24.08.2011, 14:06:57
- - thek   @Crozin: niekoniecznie ze stanu globalnego. Kto mi...   24.08.2011, 17:05:20
- - smentek   Chciał bym się odnieść do paru perełek: 1. Metody...   24.08.2011, 20:14:52
- - rahul   Ey ziomeczki, a nakierujcie mnie prosze w kwesti n...   25.08.2011, 00:32:14
- - Fifi209   Napisz klasę, która będzie obserwować obiekt, jak ...   25.08.2011, 00:52:55
- - rahul   no jo, ale nie bardzo wiem jak   25.08.2011, 01:20:32
- - Noidea   @Fifi209 Moim zdaniem bez sensu. Przy zmianie kilk...   25.08.2011, 08:02:24
- - rahul   a no, jak tak to bez problemu. Kontynuujac - Cz...   26.08.2011, 22:13:56
|- - starach   Cytat(rahul @ 26.08.2011, 23:13:56 ) ...   27.08.2011, 01:16:53
- - Sajrox   Chciałbym poćwiczyć technikę 'Dependency Injec...   5.09.2011, 11:16:50
- - Noidea   1. Nic nie stoi na przeszkodzie, żeby UserManager ...   6.09.2011, 09:04:14
- - Sajrox   Wydaje mi się że poniższe rozwiązanie nie jest zby...   7.09.2011, 10:16:11
- - Noidea   CytatZawsze gdy chcemy utworzyć instancję klasy ...   7.09.2011, 12:36:48


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 22:19