Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przekazywanie obiektu bazy do innych klas. Jak?
kilab
post 13.02.2011, 22:56:28
Post #1





Grupa: Zarejestrowani
Postów: 180
Pomógł: 19
Dołączył: 4.11.2007

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
Crozin
post 13.02.2011, 23:04:49
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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").
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:51