Моя первая строка в моем сценарии у меня есть:Глобальная переменная в методе класса NULL
$db = new db_class();
Это просто пример, чтобы запустить объект дб. Тогда у меня есть:
class main {
function init() {
$this->session_start();
}
protected function session_start() {
$sh = new session_handler();
session_set_save_handler(
array (& $sh, 'open'),
array (& $sh, 'close'),
array (& $sh, 'read'),
array (& $sh, 'write'),
array (& $sh, 'destroy'),
array (& $sh, 'gc')
);
}
}
Все проблемы находятся в в session_handler
классе. Этот код:
public function write($id, $data) {
global $db;
var_dump($db); //returns NULL
}
говорит, что $db
является NULL
вместо экземпляра db_class
.
Обратите внимание, db_class
объекты работают только при вызове метода write()
:
class main {
function init() {
global $db;
var_dump($db); //returns the db object correctly
$this->session_start();
}
protected function session_start() {
$sh = new session_handler();
session_set_save_handler(
array (& $sh, 'open'),
array (& $sh, 'close'),
array (& $sh, 'read'),
array (& $sh, 'write'),
array (& $sh, 'destroy'),
array (& $sh, 'gc')
);
}
}
Что он говорит, когда вы var_dump чуть ниже этого кода строки '$ db = new $ db_class(); '? –
Почему вы используете глобальные переменные, было бы намного лучше, если бы вы передали экземпляр db в класс. –
$ db = new $ db_class() должен быть $ db = new db_class() shoudn't it? –