Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [OOP] Użycie jednej klasy wewnątrz drugiej
tikky
post
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 1
Dołączył: 2.10.2007

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


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?


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


  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. ?>


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
tikky
post
Post #3





Grupa: Zarejestrowani
Postów: 112
Pomógł: 1
Dołączył: 2.10.2007

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


Dziękuję za szybką odpowiedź, niestety nie pomogło, dalej mam ten sam komunikat.

Jakieś inne sugestie?


--------------------
Go to the top of the page
+Quote Post
-=Peter=-
post
Post #4





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


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. ?>


Ten post edytował -=Peter=- 1.12.2008, 15:05:14


--------------------
Go to the top of the page
+Quote Post
tikky
post
Post #5





Grupa: Zarejestrowani
Postów: 112
Pomógł: 1
Dołączył: 2.10.2007

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


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ć?


--------------------
Go to the top of the page
+Quote Post
wlamywacz
post
Post #6





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


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


Pokaż kod o którym tutaj piszesz.

Ten post edytował wlamywacz 1.12.2008, 16:17:06
Go to the top of the page
+Quote Post
Vielta
post
Post #7





Grupa: Zarejestrowani
Postów: 59
Pomógł: 6
Dołączył: 9.04.2007
Skąd: Szczecin

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


  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?
Go to the top of the page
+Quote Post
tikky
post
Post #8





Grupa: Zarejestrowani
Postów: 112
Pomógł: 1
Dołączył: 2.10.2007

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


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


--------------------
Go to the top of the page
+Quote Post
Vielta
post
Post #9





Grupa: Zarejestrowani
Postów: 59
Pomógł: 6
Dołączył: 9.04.2007
Skąd: Szczecin

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


Globale... globale nie ukrywajmy są złem i zaprzeczają zasadom programowania obiektowego (zresztą sporo o tym na forum.php.pl).
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #10





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


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.


--------------------
My mind is glowing ...
Jeśli pomogłem push the button :)
Go to the top of the page
+Quote Post
erix
post
Post #11





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
karmer
post
Post #12





Grupa: Zarejestrowani
Postów: 23
Pomógł: 2
Dołączył: 3.09.2008
Skąd: Kętrzyn

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


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
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #13





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Bo kolega ~tikky na razie poznaje składnię php winksmiley.jpg


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
plurr
post
Post #14





Grupa: Zarejestrowani
Postów: 175
Pomógł: 12
Dołączył: 28.06.2007
Skąd: Bytom

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


  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

Ten post edytował plurr 3.12.2008, 20:50:31


--------------------
Wyobraźnia bez wiedzy może stworzyć rzeczy piękne.
Wiedza bez wyobraźni najwyżej doskonałe.

Albert Einstein
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 Aktualny czas: 22.08.2025 - 10:03