全局变量在类方法中为 NULL


Global variable is NULL in class method

我在脚本中的第一行有:

$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')
        );  
    }
}

我想问题出在第一行
$db = new $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);
}
}