2012-02-04 43 views
0

我在我的脚本第一行,我有:全局变量是在类方法NULL

$db = new db_class(); 

这仅仅是一个开始db对象实例。然后我有:

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 
} 

$dbNULL代替的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(); '? – 2012-02-04 09:43:23

+2

为什么使用全局变量,如果将db实例传入类中,会更好。 – 2012-02-04 09:44:43

+0

$ db = new $ db_class()应该是$ db = new db_class()不是吗? – 2012-02-04 09:44:44

回答

1

我想这个问题是在第一线
$ DB =新的$ 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

没有它没有问题因为这只是一个例子,它开始并在任何地方工作 – 2012-02-04 09:48:52

+0

这不是我确定的问题 – 2012-02-04 09:56:22