类方法中的全局变量为NULL

时间:2012-02-04 09:40:08

标签: php

我的剧本中的第一行是:

$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 个答案:

答案 0 :(得分:1)

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