Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Programowanie obiektowe
Forum PHP.pl > Forum > Przedszkole
qba10
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. ?>
nevt
NIE i NIE
chlebik
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 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.
qba10
@nevt- Jak to moja mamusia by powiedziała: " Musisz więcej książek czytać, bo nie potrafisz się wysłowić" hehe 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ł" smile.gif
chlebik
Re Up:

O logice sie nie wypowiadalem bo do tworzenia tego typu klas to najlepiej poczytac o wzorcach projektowych (w dziale Pro bodajze).
nevt
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.
qba10
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 sad.gif
A za kaleczenie języka i za głupie uwagi z całego serca przepraszam

Pozdrawiam
qpanas
sprawdź co masz na końcu linii nr 16!!!
qba10
O najdroższa matulo jaki ja ślepy byłem, a z 15 minut nad tym siedziałem aż wstyd biggrin.gif
Thx

Pozdrawiam
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.