2012-02-04 4 views
0

Моя первая строка в моем сценарии у меня есть:Глобальная переменная в методе класса 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') 
     ); 
    } 

} 
+1

Что он говорит, когда вы var_dump чуть ниже этого кода строки '$ db = new $ db_class(); '? –

+2

Почему вы используете глобальные переменные, было бы намного лучше, если бы вы передали экземпляр db в класс. –

+0

$ db = new $ db_class() должен быть $ db = new db_class() shoudn't it? –

ответ

1

Я предполагаю, что проблема находится на первой линии
$ дб = новый $ db_class();

, если думаю, что это должно быть, как

$db = new db_class(); 

Или убедитесь, что $ db_class имеет значение имени класса, который вы хотите инициализировать

Как о попытке что-то вроде этого

class main{ 
protected $_db; 

function init($db){ 
    $this->_db = $db; 
    $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') 
    );   
} 
public function write($id, $data) { 
    vardump($this->_db); 
} 
} 
+0

Нет, это не проблема потому что это просто пример его начала и работы в любом месте –

+0

это не проблема, я уверен –

Смежные вопросы