Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Programowanie obiektowe
qba10
post
Post #1





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


Witam
Właśnie co uczę się na sucho programowania obietowego.
Mam o to taki kod:
  1. <?php
  2. class baza_danych
  3.  {
  4. var $bazadanych_connect;
  5. var $bazadanych_connect_db;
  6. var $host; 
  7. var $user;
  8. var $password;
  9. var $dbname;
  10. var $rodzaj;
  11.  
  12.  public function __construct($rodzaj)
  13.  {
  14.  $this->rodzaj = $rodzaj ;
  15.  
  16.  }
  17.  
  18.  private function wybor_bazy_danych()
  19. {
  20. $konstrukcja_connect = '@'.$this->rodzaj.'_connect($this->host, $this->user, $this->password );';
  21. $konstrukcja_connect_db = '@'.$this->rodzaj.'_select_db($this->dbname);' ;
  22. $connect = $konstrukcja_connect;
  23. $connect_db = $konstrukcja_connect_db;
  24.  
  25. if ($connect) { $this->bazadanych_connect = 1; } else { $this->bazadanych_connect = 0;}
  26. if ($connect_db) { $this->bazadanych_connect_db = 1; } else { $this->bazadanych_connect_db = 0;}
  27. }
  28.  
  29.  
  30.  
  31. function polaczenie($host, $user, $password, $dbname )
  32. {
  33. $this->host = $host ;
  34. $this->user = $user ;
  35. $this->password = $password ;
  36. $this->dbname = $dbname ;
  37.  
  38. if ($this->bazadanych_connect = 0)
  39. {
  40.  echo'blad polaczenie z baza danych'.$this->rodzaj ;
  41. }
  42. if ($this->bazadanych_connect_db = 0)
  43. {
  44.  echo'blad polaczenie z baza danych'.$this->rodzaj ;
  45. }
  46.  
  47. }
  48. }
  49. ?>


I tu własnie moje pytanie. Czy ta klasa jest poprawna i czy przy wywołaniu jej w sposub pokazany ponizej otrzymam pozadany wynik?
  1. <?php
  2. $baza_danych = new baza_danych($mysql_lub_pg) ;
  3.  echo $baza_danych->polaczenie($host, $user, $password, $dbname ) ;
  4. ?>


Ten post edytował qba10 7.06.2008, 19:26:02
Go to the top of the page
+Quote Post
nevt
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


NIE i NIE
Go to the top of the page
+Quote Post
chlebik
post
Post #3





Grupa: Zarejestrowani
Postów: 113
Pomógł: 5
Dołączył: 12.09.2006
Skąd: Pruszków/Warszawa

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


Re Up: Prosilbym adminow o usuniecie, cos mi automat do logowania nie zadzialal i wyszlo jak wyszlo.


Cytat(qba10 @ 7.06.2008, 20:07:53 ) *
Witam
Właśnie co uczę się na sucho programowania obietowego.


Na sucho to kiepski pomysl, sprobuj cos realnego napisac - najlepsza rzecz do tego - blog na uzytek domowy.

Cytat
Mam o to taki kod:
  1. <?php
  2. class baza_danych
  3.  {
  4. var $bazadanych_connect;
  5. var $bazadanych_connect_db;
  6. var $host; 
  7. var $user;
  8. var $password;
  9. var $dbname;
  10. var $rodzaj;
  11.  
  12.  public function __construct($rodzaj)
  13.  {
  14.  $this->rodzaj = $rodzaj ;
  15.  
  16.  }
  17.  
  18.  private function wybor_bazy_danych()
  19. {
  20. $konstrukcja_connect = '@'.$this->rodzaj.'_connect($this->host, $this->user, $this->password );';
  21. $konstrukcja_connect_db = '@'.$this->rodzaj.'_select_db($this->dbname);' ;
  22. $connect = $konstrukcja_connect;
  23. $connect_db = $konstrukcja_connect_db;
  24.  
  25. if ($connect) { $this->bazadanych_connect = 1; } else { $this->bazadanych_connect = 0;}
  26. if ($connect_db) { $this->bazadanych_connect_db = 1; } else { $this->bazadanych_connect_db = 0;}
  27. }
  28.  
  29.  
  30.  
  31. function polaczenie($host, $user, $password, $dbname )
  32. {
  33. $this->host = $host ;
  34. $this->user = $user ;
  35. $this->password = $password ;
  36. $this->dbname = $dbname ;
  37.  
  38. if ($this->bazadanych_connect = 0)
  39. {
  40.  echo'blad polaczenie z baza danych'.$this->rodzaj ;
  41. }
  42. if ($this->bazadanych_connect_db = 0)
  43. {
  44.  echo'blad polaczenie z baza danych'.$this->rodzaj ;
  45. }
  46.  
  47. }
  48. }
  49. ?>


I tu własnie moje pytanie. Czy ta klasa jest poprawna i czy przy wywołaniu jej w sposub pokazany ponizej otrzymam pozadany wynik?
  1. <?php
  2. $baza_danych = new baza_danych($mysql_lub_pg) ;
  3.  echo $baza_danych->polaczenie($host, $user, $password, $dbname ) ;
  4. ?>



1. Wlasnosci egzemplarza definiuj jako public/private/protected - od razu widac zakresy wlasnosci.
2. Z gory zakladasz w konstruktorze, ze bedzie dostarczona poprawna nazwa. Na sucho i w prostej rzeczy to OK, ale dobrze byloby zrobic jakas walidacje i dac tez wartosc domyslna.
3. W metodzie 'wybor_bazy_danych' nie nalezy przypisywac uchwytu do innej zmiennej. Po co to? Zrob tak po prostu:

  1. <?php
  2. IF/CASE ($this->rodzaj == COSTAM) {
  3. $connect = @mysql_connect($this->host, $this->user, $this->password );
  4. }
  5.  
  6. ELSE IF($this->rodzaj == COSTAM_INNEGO)
  7. {
  8. $connect = @pg_connect($this->host, $this->user, $this->password );
  9. }
  10. ELSE 
  11. JAKIES DOMYSLNE
  12.  
  13. if($connect) {
  14. $this->konstrukcja_connect = true;
  15. $konstrukcja_connect_db = '@'.$this->rodzaj.'_select_db($this->dbname);' ;
  16.  
  17. IF($konstrukcja_connect_db) { $this->bazadanych_connect = true; } else { $this->bazadanych_connect = false; }
  18. ?>



4. Definiujesz zreszta te metode nie wywolujac jej w ogole (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !! W Ifach w metodzie polaczenie() zapisujesz wartosci do atrybutow obiektu, ale w ifie masz bledy, gdyz:
- $this->baza_danych_connect czy cos tam to cholera wie co w tym momencie zawiera (pewnikiem true albo NULL) zatem porownanie jest do chrzanu!!! Co wiecej operator porownania to '==', a nie '='. Ten drugi zapis zawsze daje TRUE lub FALSE w zaleznosci co tam niby porownujesz. (HINT: niektorzy purysci mowa by robic tak: IF(2 == $zmienna); )
- by zas byla okreslona przed ifami musisz wrzucic wywolanie metody wybor_bazy_danych. Zas najlepiej by bylo laczyc od razu w konstruktorze z danymi polaczenia jako parametrami (najlepiej przekazywanymi w tablicy, wygodniej to potem podpiac pod jakies pliki konfiguracyjne). Wiadomo przeciez, ze obiekt sluzy do polaczenia, a i jakiekolwiek jego metody tegoz polaczenia wymagaja.

Ten post edytował chlebik 8.06.2008, 00:33:56
Go to the top of the page
+Quote Post
qba10
post
Post #4





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


@nevt- Jak to moja mamusia by powiedziała: " Musisz więcej książek czytać, bo nie potrafisz się wysłowić" hehe (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)
@chlebik - Więcej tu było błędów logicznych niż programowania obiektowego, ale i tak dziękuję za wszystkie uwagi. Ode mnie "pomógł" (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
chlebik
post
Post #5





Grupa: Zarejestrowani
Postów: 113
Pomógł: 5
Dołączył: 12.09.2006
Skąd: Pruszków/Warszawa

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


Re Up:

O logice sie nie wypowiadalem bo do tworzenia tego typu klas to najlepiej poczytac o wzorcach projektowych (w dziale Pro bodajze).
Go to the top of the page
+Quote Post
nevt
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


Cytat
Jak to moja mamusia by powiedziała: " Musisz więcej książek czytać, bo nie potrafisz się wysłowić" hehe

udzieliłem bardzo precyzyjnej odpowiedzi na twoje 2 pytania.
Cytat
Czy ta klasa jest poprawna i czy przy wywołaniu jej w sposub pokazany ponizej otrzymam pozadany wynik?

Gdybyś przeczytał więcej książek, z pewnością potrafiłbyś zadać pytania w sposób, który wskazywałby że oczekujesz głębszej odpowiedzi niż proste TAK lub NIE. I potrafiłbyś nie kaleczyć naszego pięknego języka poprzez łamanie zasad ortografii. Ale skoro twoją wyrocznią jest twoja mamusia, to z całą pewnością udzieli ci również wszelkiej pomocy z OOP w PHP.

Pozdrawiam.
Go to the top of the page
+Quote Post
qba10
post
Post #7





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


Napisałem ten oto obiekt na nowo i wyskakuje mi błąd:
Fatal error: Non-abstract method baza_danych::polaczenie() must contain body in /home/qba10/public_html/test/system/jadro/e-door/functions/polaczenie.php on line 16
  1. <?php
  2. class baza_danych 
  3. {
  4. private $host, $user, $pass, $dbname, $rodzaj, $error;
  5.  
  6. public function __construct($host, $user, $pass, $dbname, $rodzaj ) 
  7. {
  8. $this->host = $host ;
  9. $this->user = $user ;
  10. $this->pass = $pass ;
  11. $this->dbname = $dbname;
  12. $this->rodzaj = $rodzaj ;
  13.  
  14. }
  15.  
  16. public function polaczenie() ;
  17. {
  18. if ( 'mysql' == $this->rodzaj )
  19. {
  20. $wykonaj = @mysql_connect($this->host, $this->user, $this->pass)
  21. }
  22. elseif ( 'pg' == $this->rodzaj )
  23. {
  24. $wykonaj = @pg_connect($this->host, $this->user, $this->pass)
  25. }
  26. else
  27. {
  28. $include = include ('system/jadro/e-door/includes/error_bazydanych_rodzaj.php') ;
  29. echo $include ;
  30. }
  31. if ($wykonaj) 
  32. {
  33. if ( 'mysql' == $this->rodzaj )
  34. {
  35. $db = @mysql_select_db($this->dbname);
  36. if (!$db)
  37. {
  38. $include2 = include ('system/jadro/e-door/includes/error_bazydanych_db.php') ;
  39. }
  40. }
  41. elseif ( 'pg' == $this->rodzaj )
  42. {
  43. $db = @pg_select_db($this->dbname);
  44. if (!$db)
  45. {
  46. $include2 = include ('system/jadro/e-door/includes/error_bazydanych_db.php') ;
  47. }
  48. }
  49. else
  50. {
  51. $include2 = include ('system/jadro/e-door/includes/error_bazydanych.php') ;
  52. }
  53. }
  54.  
  55. }
  56. }
  57. ?>


Jaki znowu błąd popełniłem?

@nevt
Mamusia nawet nie wie co to PHP (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
A za kaleczenie języka i za głupie uwagi z całego serca przepraszam

Pozdrawiam
Go to the top of the page
+Quote Post
qpanas
post
Post #8





Grupa: Zarejestrowani
Postów: 30
Pomógł: 2
Dołączył: 12.05.2008

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


sprawdź co masz na końcu linii nr 16!!!
Go to the top of the page
+Quote Post
qba10
post
Post #9





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


O najdroższa matulo jaki ja ślepy byłem, a z 15 minut nad tym siedziałem aż wstyd (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Thx

Pozdrawiam

Ten post edytował qba10 19.06.2008, 20:47:22
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 13:42