Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP] Użycie jednej klasy wewnątrz drugiej
Forum PHP.pl > Forum > PHP > Object-oriented programming
tikky
Witam, 

Proszę wybaczyć jeśli to pytanie jest banalne, ale zaczynam zabawe z obiektami dopiero.


Używam biblioteki EZ_SQL aby pobrać dane z bazy, na przykład:

  1. <?php
  2. $user = $db->get_row("SELECT temperatura FROM dane WHERE id = 2");
  3. echo $user->temperatura;
  4. ?>


i to dziaa, ale chciałbym teraz umieścić takie połączenie z bazą w środku mojej klasy i to już nie działa

  1. <?php 
  2. include('ez_sql.php');
  3.  
  4. class Test
  5.  {
  6.   var $id;
  7.   var $opis;
  8.   var $temperatura;
  9.        
  10.   function __construct($id=null)
  11.   {
  12.   $this->id = $id;
  13.   $this->odczytaj();
  14.   }
  15.        
  16.   function odczytaj() 
  17.   {
  18.      $user = $db->get_row("SELECT temperatura FROM dane WHERE id = 2");
  19.      echo $user->temperatura; 
  20.   }       
  21.  }
  22. ?>


Mam błąd: Fatal error: Call to a member function get_row() on a non-object ..

Co robię źle?
skowron-line
  1. <?php
  2. include('ez_sql.php');
  3.  
  4. class Test
  5. {
  6.  var $id;
  7.  var $opis;
  8.  var $temperatura;
  9.      
  10.  function __construct($id=null)
  11.  {
  12.  $this->id = $id;
  13.  $this->odczytaj();
  14. $this->db = new DB();
  15.  }
  16.      
  17.  function odczytaj()
  18.  {
  19.     $user = $this->db->get_row("SELECT temperatura FROM dane WHERE id = 2");
  20.     echo $user->temperatura;
  21.  }      
  22. }
  23. ?>
tikky
Dziękuję za szybką odpowiedź, niestety nie pomogło, dalej mam ten sam komunikat.

Jakieś inne sugestie?
-=Peter=-
Co to ma wspólnego z OOP?

  1. <?php
  2. //ciach
  3. var $id;
  4. var $opis;
  5. var $temperatura;
  6. var $db;//dopisz ten atrybut!
  7. //ciach
  8. ?>
tikky
No dodałem i dalej ten sam komunikat.

Co to ma wspólnego z OOP? Próbuje się nauczyć programowania obiektowego ale właśnie napotkałem problem, ktorego natury nie rozumiem. Chyba PHP Forum jest miejscem gdzie mogę zapytać?
wlamywacz
Cytat
Używam biblioteki EZ_SQL aby pobrać dane z bazy, na przykład:


Pokaż kod o którym tutaj piszesz.
Vielta
  1. <?php
  2. include('ez_sql.php');
  3.  
  4. class Test
  5. {
  6.  var $id;
  7.  var $opis;
  8.  var $temperatura;
  9.  private $db;
  10.  
  11.  function __construct($db, $id=null)
  12.  {
  13.  $this->id = $id;
  14.  $this->odczytaj();
  15.  $this->db = $db;
  16.  }
  17.      
  18.  function odczytaj()
  19.  {
  20.     $user = $this->db->get_row("SELECT temperatura FROM dane WHERE id = 2");
  21.     echo $user->temperatura;
  22.  }      
  23. }
  24. ?>
Coś takiego?
tikky
Problemem okazał się błachy lecz trudny (dla mnie) do znalezienia.

Należało dołożyć jedną linijkę:

  1. <?php
  2.  function odczytaj() 
  3.  {
  4.  
  5. -----> global $db;
  6.     $user = $this->db->get_row("SELECT temperatura FROM dane WHERE id = 2");
  7.     echo $user->temperatura; 
  8.  }   
  9. ?>


Dziękuje wszystkim za odpowiedzi i pomoc
Vielta
Globale... globale nie ukrywajmy są złem i zaprzeczają zasadom programowania obiektowego (zresztą sporo o tym na forum.php.pl).
jajcarzd1
Cytat(Vielta @ 2.12.2008, 17:34:42 ) *
Globale... globale nie ukrywajmy są złem i zaprzeczają zasadom programowania obiektowego (zresztą sporo o tym na forum.php.pl).


A to niby dlaczego ? Po co mu wiele instancji bazodanowcych. Stworzy sobie globalnego singletona bazodanowego kórego będzie wykorzystywał wszędzie. Jeden obiekt, dostępny wszędzie, mniej pożartych zasobów pamięci.
erix
Cytat
Stworzy sobie globalnego singletona

Tautologia?

Albo singleton, albo global... W przypadku singletona nie nadpisze tej samej instancji jakąś zmienną w przeciwieństwie do global" title="Zobacz w manualu PHP" target="_manual.
karmer
Witam,
dlaczego kolegę tikky-ego jeszcze nikt nie uświadomił dlaczego w OOP bardzo ważna jest hermetyzacja?
Przecież stosowanie global 'rozwala w pył' zasady panujące w OOP.

Pozdrawiam
Cysiaczek
Bo kolega ~tikky na razie poznaje składnię php winksmiley.jpg
plurr
  1. <?php
  2. include('ez_sql.php');
  3.  
  4. class Test
  5. {
  6.  protected $_id;
  7.  protected $_opis;    // questionmark.gif
  8.  protected $_temperatura; // questionmark.gif
  9.  protected $_db;
  10.  
  11.  function __construct(Ez_Sql $db, $id=null) //
  12.  {
  13.   $this->_id = $id;
  14.   $this->_db = $db;
  15.  
  16.  // zapomiales o kolejnosci, najpierw uzyles metody
  17.  //ktora operuje na niezdefiniowanym obiekcie.
  18.  //Najpierw przypisujesz instancje db do obiektu, a pozniej SQL na obiekcie.
  19.   $this->odczytaj();
  20.  
  21.  }
  22.      
  23.  function odczytaj()
  24.  {
  25.      $sql = "SELECT TEMPERATURA FROM DANE";
  26.      
  27.      if (!empty($this->_id) && is_int($this->_id)) {
  28.           $sql .= " WHERE id = ". $this->_id;
  29.      }
  30.  
  31.     $user = $this->db->get_row($sql);
  32.     echo $user->temperatura;  
  33.     // nie wiem jak wyglada ta biblioteka ez_sql, ale czy zwraca instancje i obiekt 'temperatura' ?
  34.  }      
  35. }
  36. ?>


// sorki, to Vielta podal taki przyklad kodu, a nie autor tematu smile.gif
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.