Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dziedzicenie
Forum PHP.pl > Forum > PHP > Object-oriented programming
kicaj
Kod
  1. <?php
  2. class DB
  3. {
  4. private $resDbConnect;
  5.  
  6. // singleton, laczenie etc.
  7. // $resDbConnect = mysql_connect, mysql_select_db
  8.  
  9. public function setQuery( $strDbQuery )
  10. {
  11.  $this -> resDbQuery = mysql_query( $strDbQuery, $this -> resDbConnect ); // tutaj...
  12. }
  13. }
  14.  
  15. class Przyklad extends DB
  16. {
  17. public function getAll()
  18. {
  19.  $this -> setQuery( 'SELECT * FROM tabela' );
  20. }
  21. }
  22.  
  23. // Przyklady:
  24. $tmp = DB::singleton...;
  25. $tmp -> connect...
  26. $tmp -> setQuery( 'SELECT * FROM tabela' ); // Dziala poprawnie, zwraca wynik
  27.  
  28. $pmt = new Przyklad...
  29. $pmt -> getAll(); // Nie dziala, zwraca blad: "supplied argument is not a valid MySQL-Link resource"
  30. ?>

Blad wystepuje przy dziedziczeniu, dlaczego?
NuLL
private -> protected smile.gif Zmienne o dostepie prywatnym sa widoczne w obrebie tylko danej klasy. Dostep protected pozwala aby zmienna byla widoczna rowniez w klasach dziedziczacych dana klase smile.gif

Pozdr.
kicaj
Mowa o `private $resDbConnect` na `protected`? Bo nic to nie zmienia...
Dalej zwraca blad!
nospor
No ale w jaki sposob generujesz wartość dla $this -> resDbConnect?
Bo w tym jest blad.
Napisales tylko:
Cytat
// singleton, laczenie etc.
// $resDbConnect = mysql_connect, mysql_select_db
No, duzo nam to mowi smile.gif
najwyraźniej Twoj mysql_connect() lub cos podobnego źle dziala
kicaj
  1. <?php
  2. class DB
  3. {
  4. private static $objInstance; 
  5. protected $resDbConnect; 
  6. public $resDbQuery;
  7.  
  8. private function __construct() 
  9. {
  10. }
  11.  
  12. static public function getInstance() 
  13. {
  14. if ( empty( self::$objInstance ) ) 
  15. {
  16. self::$objInstance = new DB();
  17. }
  18.  
  19. return self::$objInstance;
  20. }
  21.  
  22. public function setConnect( $strDbHost, $strDbUser, $strDbPass, $strDbName ) 
  23. {
  24. $this -> resDbConnect = mysql_connect( $strDbHost, $strDbUser, $strDbPass );
  25.  
  26. if( $this -> resDbConnect ) 
  27. {
  28. $resDbSelect = mysql_select_db( $strDbName, $this -> resDbConnect );
  29.  
  30. if( $resDbSelect ) 
  31. {
  32. //return $this -> resDbConnect;
  33. } 
  34. else 
  35. {
  36. mysql_close( $this -> resDBConnect );
  37. echo "zle - baza";
  38. }
  39. } 
  40. else 
  41. {
  42. echo "zle - serwer";
  43. }
  44. }
  45.  
  46. public function setQuery( $strDbQuery ) 
  47. {
  48. $resDbQuery = mysql_query( $strDbQuery, $this -> resDbConnect ); // tutaj w drugim przykladzie zwraca blad...
  49.  
  50. if( $resDbQuery ) 
  51. {
  52. $this->intDbQueries++;
  53.  
  54. //return $this -> resDbQuery;
  55.  
  56. echo "ok";
  57. } 
  58. else 
  59. {
  60. echo "zle - zapytanie";
  61. }
  62. }
  63. ?>


Jak pisalem wyzej podane dwa przyklady, jeden dziala, drugi zwraca komunikat...
nospor
Cytat
Jak pisalem wyzej podane dwa przyklady, jeden dziala, drugi zwraca komunikat...
a co to ma do mojego posta? Slepy nie jestem i widze ze masz dwa przyklady, ino kazdy operuje na czym innym wiec jesli jeden jest bledny to nie ma co sie dziwic ze nie dziala...

  1. <?php
  2. $pmt = new Przyklad...
  3. $pmt -> getAll();
  4. ?>

Inicjalizujesz obiekt klasy przyklad, wywolujesz getAll(), ale gdzie niby jest nawiązanie polaczenia do bazy?
Nigdzie nie widze bys wywolywal metode setConnect().
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.