W wersji PHP 5.2.5 pojawił się pewien problem, którego poprzednio nie było.
Najlepiej wyjaśnię o co chodzi na przykładzie.
Kod wygląda następująco, został on trochę zmodyfikowany, żeby był jak najkrótszy, ale żeby wystąpił problem.
Normalnie klasy są w osobnych plikach dołączane require_once.
<?php class ApplicationCore { var $_appInitialized; function ApplicationCore() { $this->_appInitialized = FALSE; } function initializeApplication() { $this->_appInitialized = TRUE; } } $appCore = new ApplicationCore(); $appCore->initializeApplication(); class CustomSession { var $_sessionTable; function CustomSession() { $this->setSessionTable('active_session'); } function setSessionTable($tablename) { if($tablename<>NULL) { $this->_sessionTable = $tablename; return TRUE; } else { return FALSE; } } function getSessionTable() { return $this->_sessionTable; } function _open($save_path, $session_name) { return TRUE; } function _close() { $this->_gc(0); return TRUE; } function _read($session_id) { } function _write($session_id, $session_data) { } function _destroy($session_id) { } function _gc($maxlifetime) { } } $sess = new CustomSession(); ?>
Widać dwie klasy CustomSession do obsługi sesji oraz ApplicationCore z całym balastem do łączenia z bazą i innymi.
Oto co wyświetla przeglądarka:
CODE
CustomSession: object(ApplicationCore)#1 (1) { ["_appInitialized"]=> bool(true) }
setSessionTable: object(ApplicationCore)#1 (1) { ["_appInitialized"]=> bool(true) }
_open: object(ApplicationCore)#1 (1) { ["_appInitialized"]=> bool(true) }
_read: object(ApplicationCore)#1 (1) { ["_appInitialized"]=> bool(true) }
_write: NULL
_close: NULL
_gc: NULL
setSessionTable: object(ApplicationCore)#1 (1) { ["_appInitialized"]=> bool(true) }
_open: object(ApplicationCore)#1 (1) { ["_appInitialized"]=> bool(true) }
_read: object(ApplicationCore)#1 (1) { ["_appInitialized"]=> bool(true) }
_write: NULL
_close: NULL
_gc: NULL
Oczywiście problemem są te NULL'e, co w rezultacie skutkuje:
Fatal error: Call to a member function Query() on a non-object in
Siedzę już nad tym drugi dzień i zgłupiałem.
Jeśli ktoś byłby w stanie pomóc to byłoby super.
Pozdrawiam