Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Używanie klasy w innej klasie
Forum PHP.pl > Forum > Przedszkole
skw
Cześć, chcę wykonać zapytanie do db w klasie, ale wyskakuje błąd
  1. Fatal error: Call to a member function query_select() on a non-object in [...] on line 50


funkcja która powoduje błąd:
  1. function CheckUser() {
  2. if($this->user &&
  3. !empty($this->user) &&
  4. $this->pass &&
  5. !empty($this->pass)
  6. ) {
  7.  
  8. $query = $db->query_select("SELECT * FROM users WHERE
  9. user_name = '$this->user' &&
  10. user_pass = '$this->pass'
  11. ");
  12.  
  13. if(!mysql_num_rows($query)) {
  14. return false;
  15. echo 'nie ok';
  16. } else {
  17. //$this->CreateSession();
  18. echo 'ok';
  19. }
  20. }
  21. }


Myślę że to dlatego, że chcę użyć innej klasy w klasie, ale szukałem w google jak to rozwiązać i nawet przybliżenia mojego problemu nie było
by_ikar
Głównie to dlatego, że używasz zmiennej, której wcześniej nie zadeklarowałeś i nie przypisałeś jej obiektu, o czym świadczy komunikat błędu. Poczytaj o zasięgu zmiennych, jak już się dowiesz że tak nie można, przeczytaj o wzorcach projektowych a tam z kolei dowiesz się o sposobach przekazywania jednego obiektu do drugiego, a tych sposobów jest conajmniej kilka..
darko
Przekaż (albo w konstruktorze, albo w jakiejś metodzie) utworzoną instancję bazy do klasy, w której korzystasz z dobrodziejstw obsługi bazy, np.

  1. class DB
  2. {
  3. // kod obsługujący zapytania do bazy
  4. }
  5. $odb = new DB();
  6.  
  7. class MojaKlasa
  8. {
  9. protected $_db = null;
  10. // za pomocą konstruktora
  11. public function __construct($db = null)
  12. {
  13. if(!is_null($db) && $db instanceof DB))
  14. {
  15. $this->_db = $db;
  16. }
  17. }
  18. // za pomocą metody:
  19. public function setDatabaseInstance(DB $db)
  20. {
  21. if(!is_null($this->_db))
  22. {
  23. $this->_db = $db;
  24. return $this;
  25. }
  26. }
  27.  
  28. public function checkUser($id)
  29. {
  30. if(!is_null($this->_db))
  31. {
  32. $query = $this->_db->query_select(... // itd. return true if exists, otherwise false
  33. }
  34. }
  35. }
  36.  
  37. $myClass = new MyClass($odb);
  38.  
  39. // lub:
  40. $myClass = new MyClass();
  41. if($myClass->setDatabaseInstance($odb)->checkUser(5))
  42. {
  43. echo 'użytkownik istnieje!';
  44. }
  45. else
  46. {
  47. echo 'nie ma takiego użytkownika';
  48. }
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.