Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przekazywanie obiektu bazy do innych klas. Jak?
Forum PHP.pl > Forum > PHP > Object-oriented programming
kilab
Witam, ostatnio zacząłem rozmyślać nad nauką obiektowości bo strukturalność już mi się przejada, poza tym nie wolno stać w miejscu snitch.gif
Postanowiłem więc uczyć się tego na konkretnym przykładzie. Pojawił się problem przy wykonywaniu zapytań do bazy. W efekcie chcę osiągnąć coś takiego, że tworzę obiekt bazy na samym początku pliku, a później we wszystkich klasach się do niego odwoływać żeby w każdej metodzie nie wywoływać ciągle tego obiektu. Przejrzałem trochę zasobów sieci, ale jak na złość nie potrafię tego jednego problemu wyłapać. Jak na razie osiągnąłem tylko tyle, że jak odwołam się do metody w indexie to dane zostaną prawidłowo wyświetlone. Gdy chcę pobrać dane w innej klasie - session, otrzymuję fatala, że funkcja query w metodzie info nie jest obiektem. Na tym przykładzie próbuję z mysqli, ale z PDO było to samo.
index.php:
  1. <?php
  2.  
  3. $db = new mysqli('localhost','root','x','forum');
  4.  
  5. require('classes.php');
  6.  
  7. $user = new user($db);
  8. $session = new session;
  9.  
  10. print_r($session->show());
  11. ?>

classes.php:
  1. <?php
  2. class user{
  3. private $db;
  4.  
  5. function __construct(&$db){
  6. $this->db=&$db;
  7. }
  8.  
  9. function info(){
  10. $res = $this->db->query('SELECT * FROM users');
  11. while ($row = $res->fetch_object()) {
  12. return $row;
  13. }
  14.  
  15. }
  16.  
  17. }
  18.  
  19. class session{
  20. function show(){
  21. $user = new user($db);
  22. return $user->info();
  23. }
  24.  
  25. }
  26. ?>


Za pomoc będę wdzięczny, a i uwagami nie pogardzę wink.gif
Crozin
1. Obiekty zawsze przekazywane są przez referencję, więc możesz wywalić jawne odwołanie się do niej.
2. Session::show() - używasz zmiennej $db, która nie jest zdefiniowana (włącz sobie raportowanie wszystkich błędów, czyli "-1", zamiast "E_ALL").
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.