Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: użycie metod jednej klasy w drugiej
Forum PHP.pl > Forum > PHP > Object-oriented programming
sunpietro
witam,
ostatnio próbuję się bawić obiektowym PHP i mam problem z wykorzystaniem metod z jednej klasy wewnątrz drugiej.

Mój kod wygląda następująco:
  1. //klasa do łączenia się z bazą - w przyszłości to będzie Singleton
  2.  
  3. class DB {
  4. private $server = 'localhost';
  5. private $db_nazwa = 'baza';
  6. private $db_user = 'root';
  7. private $db_pass = '';
  8.  
  9. public function __construct() {
  10. $polaczenie = mysql_connect($this->server, $this->db_user, $this->db_pass) or die('<p>Nie można połączyć się z serwerem baz danych.</p>');
  11. $base = mysql_select_db($this->db_nazwa, $polaczenie);
  12. if($base)
  13. echo '<p>Połączono z '.$this->db_nazwa.'</p>';
  14. }
  15.  
  16. public function zapytanie($query) {
  17. $wynik = mysql_query($query);
  18. if(!empty($wynik)) {
  19. return $wynik;
  20. }
  21. else {
  22. echo '<p>Błąd zapytania</p>';
  23. }
  24. }
  25. }


  1. //klasa generatora treści
  2.  
  3. class Generator {
  4. protected $dane_firmy = '';
  5. private $db = '';
  6.  
  7. function __construct(DB $db) {
  8. $this->db = $db;
  9. }
  10.  
  11. function pobierzFirmy() {
  12. $query = '
  13. SELECT imie, nazwisko, opis
  14. FROM fe_users
  15. WHERE typ_konta = "2"
  16. ORDER BY uid DESC
  17. ';
  18. $wynik = $this->db->zapytanie($query);
  19. echo $wynik;
  20. return $dane_firmy;
  21. }
  22. }


Takie wykorzystanie kodu generuje mi błąd: "Fatal error: Cannot redeclare class DB" czyli nie można zredeklarować klasy DB, ale co to dokładnie oznacza?
Jak inaczej mogę wykorzystać tego typu metody w klasach?
wookieb
2 razy dołączyłeś plik z klasą DB albo deklarujesz ją ponownie. Oto odpowiedź
sunpietro
ok, dzięki
przeoczyłem ten fakt snitch.gif
lDoran
na moje oko brak dziedziczenia
  1. require_once('/*klasa bazy danych*/');
  2.  
  3. //klasa generatora treści
  4.  
  5. class Generator extends DB {
  6. protected $dane_firmy = '';
  7. private $db = '';
  8.  
  9. function __construct(DB $db) {
  10. $this->db = $db;
  11. }
  12.  
  13. function pobierzFirmy() {
  14. $query = 'SELECT imie, nazwisko, opis FROM fe_users WHERE typ_konta = "2" ORDER BY uid DESC';
  15. $wynik = $this->db->zapytanie($query);
  16. echo $wynik;
  17. return $dane_firmy;
  18. }
  19. }
skowron-line
Cytat(lDoran @ 11.08.2010, 10:39:49 ) *
na moje oko brak dziedziczenia
  1. require_once('/*klasa bazy danych*/');
  2.  
  3. //klasa generatora treści
  4.  
  5. class Generator extends DB {
  6. protected $dane_firmy = '';
  7. private $db = '';
  8.  
  9. function __construct(DB $db) {
  10. $this->db = $db;
  11. }
  12.  
  13. function pobierzFirmy() {
  14. $query = 'SELECT imie, nazwisko, opis FROM fe_users WHERE typ_konta = "2" ORDER BY uid DESC';
  15. $wynik = $this->db->zapytanie($query);
  16. echo $wynik;
  17. return $dane_firmy;
  18. }
  19. }

To otwórz drugi bo:
1 rozwiązanie zostało podane
2 obiekt klasy został przekazany w konstruktorze, a to co ty podałeś to...
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.