Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Początki programowanie OOP, Przedstawienie kodu napisanego w oop php
Michal_PB1
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 19.03.2013

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


Jestem nowy na tym forum więc witam wszystkich.

Teraz do sedna postanowiłem rozpocząć przygodę z programowaniem obiektowym i mam pytanie czy ten kod poniżej na sens programowania obiektowego ? Proszę o wyrozumiałość to początki, ale uwagi mile widziane.
  1. class User
  2. {
  3. private $mysql;
  4. private $host = "localhost";
  5. private $uzytkownik = "user";
  6. private $baza = "baza";
  7. private $haslo = "haslo";
  8. private $prefiks = "prefiks_";
  9.  
  10. function __construct() {
  11.  
  12. $this -> spr_stan();
  13. $this -> mysql = new mysqli ($this -> host, $this -> user, $this -> pass, $this -> db);
  14.  
  15. }
  16.  
  17. function __set ($nazwa, $wartosc) {
  18. $this -> $nazwa = $wartosc;
  19. }
  20.  
  21. function __get ($nazwa) {
  22. return $this -> $nazwa;
  23. }
  24.  
  25. function zaloguj($login, $haslo) {
  26.  
  27. $sql = "SELECT * FROM ".$this -> prefiks."account WHERE login = $login AND password = $haslo ;";
  28. $sqlQry = $this -> mysql -> query($sql);
  29. $ile = $sqlQry -> num_rows;
  30. if ($ile == '1') $_SESSION['stan'] = '1';;
  31.  
  32. }
  33.  
  34. function wyloguj() {
  35.  
  36. $_SESSION['stan'] = '0';
  37. header('Location: index.php');
  38.  
  39. }
  40.  
  41. function zmien_haslo($email, $haslo) {
  42.  
  43. }
  44.  
  45. function spr_stan() {
  46.  
  47. if($_SESSION['stan'] == '1')
  48. echo '<script>powiadomienie(\'Zalogowano\', \'accept\');</script>';
  49. else
  50. {
  51.  
  52. echo '<script>powiadomienie("Aby przeglądać Panel Admina musisz się <button onClick=\"show_login();\">", "information");</script>';
  53. }
  54.  
  55. }
  56.  
  57. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Dane do połączenia z bazą powinny zostać przekazane np do konstruktora a nie na stałe zapisane w ciele klasy.
Metody __set i __get nic nie wnoszą i są tutaj niepotrzebne
Brak flirtowania danych (patrz zaloguj)
spr_stan powinna zwracać true/false w zależności czy zalogowany czy nie, zamiast wyrzucać jakieś komunikaty.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Michal_PB1
post
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 19.03.2013

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


Właśnie dane do połączeni z bazą dałem na stałe (na tą chwilę), ponieważ zastanawiałem się jak zrobić, aby w kilku klasach można było z bazy korzystać. Bo za każdym razem przekazywać dane np do konstruktora to trochę nie poręczne, myślałem nad dziedziczeniem (tylko nie wiem czy to ma sens) oraz użycie zmiennej globalne i tutaj nie do końca wiedziałem jak to uczynić smile.gif
Co do __set i __get to racja na chwilę obecną nic nie wnoszą.
Co spr_stan to słusznie biggrin.gif
Go to the top of the page
+Quote Post
d.stp
post
Post #4





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


Przyłączam się do pytania z połączeniem z bazą - jak to najlepiej zrobić, żeby można było korzystać z połączenia w kilku klasach?
Go to the top of the page
+Quote Post
Dipter
post
Post #5





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 28.11.2010
Skąd: Kraków

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


Prócz tego co wypisał Tobie Fifi209, to ad. komunikatów, które wyrzucasz podczas wystąpienia czegokolwiek - od tego są wyjątki + do tego polecam wpis na blogu Zyxa.

Co do trzymania jakichś właściwości klasy (w twoim przypadku User) wykorzystaj do tego kontener/tablicę (lecz tracisz w tym przypadku brak supportu ze strony IDE), bądź po prostu ustaw je jako zmienne w klasie i za pomocą IDE wygeneruj metody set/get.

Swoją drogą klasa User, raczej powinna określać danego użytkownika jako byt, nie jako forma autoryzacji. Ponadto staraj się używać konwencji PSR-0/1/2 i angielskiego nazewnictwa.

Ad. przekazywania połączenia z bazą danych - Najlepiej jest to zrobić poprzez przekazanie obiektu jako argument choćby konstruktora. Stwórz abstrakcyjną klasę zajmującą się "Modelem" czyli warstwą do obsługi danych i ustal w niej metodę do przekazania połączenia. Nigdy zaś nie powinieneś dziedziczyć w stylu Użytkownik - Baza danych.

Ten post edytował Dipter 20.03.2013, 14:14:21
Go to the top of the page
+Quote Post
Fifi209
post
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


W dużym ułatwieniu można choćby użyć singleton'a, którego nie polecam.

Drugim wyjściem jest napisanie jakieś klasy, która będzie trzymała cały config i połączenie z bazą w sobie i wtedy z każdego miejsca się tam dostaniesz.

Ten post edytował Fifi209 20.03.2013, 14:27:38


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
pyro
post
Post #7





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Ten kod jest niepoprawny z kilku powodów:

1. Wspomniane już robienie "dwulicowej klasy".
2. Pakowanie widoku w model.
3. Niepoprawne wywoływanie funkcji w konstruktorze.
4. Mieszanie polskich nazw z angielskimi.
5. Niekompletny kod.
6. Brak komentarzy przez co potem się pogubisz.

Przykładowe poprawne rozwiązanie (propo bazy danych):

  1. class User {
  2.  
  3. private $conn;
  4. public static $userTablePrefix = 'prefiks_';
  5.  
  6. public function __construct($conn) {
  7. $this->conn = $conn;
  8. }
  9.  
  10. }


Ten post edytował pyro 20.03.2013, 15:03:31


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
q3trm
post
Post #8





Grupa: Zarejestrowani
Postów: 83
Pomógł: 1
Dołączył: 26.02.2013

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


Korzystając z tematu. Mam pytanie, dlaczego niektóre zmienne składowe daje się w nawiasy klamrowe, np.


$variable = "{$this ->producerFirstName}";


Czytam książke "PHP Obiekty, wzorce, narzędzia" i tu autor często stosuję tę konwencję - niestety bez wspominek o konieczności ich stosowania.

Z mojego domysłu używa się ich do seperacji, ciągów znaków od innych typów danych, myle się?.
Go to the top of the page
+Quote Post
pyro
post
Post #9





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


http://php.net/manual/en/language.types.string.php -> curly syntax


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post

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 Aktualny czas: 21.08.2025 - 03:01