Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z widocznością obiektu
Forum PHP.pl > Forum > PHP > Object-oriented programming
Jarod
Mam taki skrypcik (niedokończony) do obsługi własnej sesji.
Pytanie za 100punktów: Dlaczego mogę pobrać dane z bazy w metodzie open() a jak próbuję pobrać w metodzie read() to dostaję komunikat ?:
Cytat
Notice: Undefined variable: oSessionDatabase in (...) on line 54

Fatal error: Call to a member function query() on a non-object in (...)on line 54


  1. <?php
  2.  
  3. require_once('Core/Cube/Session/SessionHandler.interface.php');
  4. require_once('Core/Cube/Session/SessionException.class.php');
  5. require_once('Core/Cube/Database/' . Config::$DbType . '/' . Config::$DbType . '.class.php');
  6.  
  7.  
  8. class CubeSession implements SessionHandler
  9. {
  10. private $aParameters = array();
  11. private $bConnected = false;
  12.  
  13. public function __construct()
  14. {
  15. if (empty(Config::$SessionHost))
  16. throw new SessionException('Nieustawiona nazwa hosta. Sprawdź plik konfiguracyjny.');
  17.  
  18. if (empty(Config::$SessionPort))
  19. throw new SessionException('Nieustawiony port hosta. Sprawdź plik konfiguracyjny.');
  20.  
  21. if (empty(Config::$SessionUser))
  22. throw new SessionException('Nieustawiona nazwa użytkownika. Sprawdź plik konfiguracyjny.');
  23.  
  24. if (empty(Config::$SessionBase))
  25. throw new SessionException('Nieustawiona nazwa bazy. Sprawdź plik konfiguracyjny.');
  26.  
  27. $this->aParameters = array(Config::$SessionHost, Config::$SessionPort, Config::$SessionUser, Config::$SessionPassword, Config::$SessionBase);
  28.  
  29. session_set_save_handler(array(& $this, 'open'), array(& $this, 'close'), array(& $this, 'read'), array(& $this, 'write'), array(& $this, 'destroy'), array(& $this, 'gc'));
  30. }
  31.  
  32.  
  33. public function open($sSessionSavePath, $sSessionName)
  34. {
  35. if (!$this->bConnected)
  36. {
  37. $oSessionDatabase = new Mysql(false, $this->aParameters);
  38. $oSessionDatabase->query('SELECT * FROM sessions;');
  39. $this->bConnected = true;
  40. }
  41.  
  42. return true;
  43. }
  44.  
  45.  
  46. public function close()
  47. {
  48. $this->gc(Config::$SessionMaxLifeTime);
  49. }
  50.  
  51.  
  52. public function read($sSessionId)
  53. {
  54. $oSessionDatabase->query('SELECT sessions_values FROM sessions WHERE sessions_identifier = ' . $sSessionId);
  55. }
  56.  
  57.  
  58. /////////////////////////////////////////////////
  59.  
  60. public function write($sSessionId, $aSessionValues){}
  61.  
  62. public function destroy($sSessionId){}
  63.  
  64. public function gc($iSessionLifeTime)
  65. {
  66. echo 'Zniszczone';
  67. }
  68.  
  69. }
  70.  
  71.  
  72. ?>
menic
OMG
Fatal error: Call to a member function query() on a non-object in (...)on line 54 Pisze wyraznie ze ta twoja zmienna nie jest obiektem. No i prawidlowo niby czemu ma byc jak nie tworzysz nigdzie obiektu w tej metodzie read() w przecisiwnstwie do open gdzie masz
  1. <?php
  2. $oSessionDatabase = new Mysql(false, $this->aParameters);
  3. ?>
Jarod
No tak. Nie wiem dlaczego pomyślałem, że jak utworze w metodzie obiekt to będzie on dostępny dla całej klasy. Utworzyłem prywatną zmienną $oConnection i w tej właściwości trzymam połączenie.
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.