为什么对象不会传递到'class property'?

时间:2011-03-31 22:44:29

标签: php oop

这感觉很明显...... 我已经在php中创建了这两个类,但我很难理解为什么该对象似乎没有被传回。

    class DataAccess {

    function dbconnect($query){
        @ $db = new mysqli(MYHOST,MYDBUSER,DBUSERPASSWORD,MYDATABASE);
        if (mysqli_connect_errno()) {
            echo '<h1>there is an error with the database connection</h1>';
            exit;
        }    
        $result = $db->query($query);
        $db->close();
        return $result;
    }

和...

    class Run {

    public $getdata;
    public $jobdetails;

    function __construct(){
        $query = 'Select ID from jobs;';
        $getdata = new DataAccess();            

        $jobdetails = $getdata->dbconnect($query);
    }

    function getJobList(){
    print_r ($this->jobdetails);

    }
}

我打电话使用:

$mything = new Run();

现在,如果我在dbconnect函数内部print_r($result);它返回元数据,但是如果我将它传递回Run类,它就不会返回任何内容。 我错过了什么?

3 个答案:

答案 0 :(得分:3)

$ jobdetails是__construct的本地,如果你想让它在实例本地,请使用$ this-&gt; jobdetails

答案 1 :(得分:2)

更改此

$jobdetails = $getdata->dbconnect($query);

对此:

$this->jobdetails = $getdata->dbconnect($query);

答案 2 :(得分:1)

首先,您不应为您运行的每个查询建立数据库连接。在构造函数中连接,然后在脚本结束时自动关闭连接

class DataAccess {

    protected $_connection = null;

    function __construct() {
        $this->_connection = new mysqli(MYHOST,MYDBUSER,DBUSERPASSWORD,MYDATABASE);
        if (mysqli_connect_errno()) {
            echo '<h1>there is an error with the database connection</h1>';
            exit;
        }
    }

    function query($query){   
        return $this->_connection->query($query);
    }

}

其次,您没有正确设置实例变量。

变化:

$jobdetails = $getdata->dbconnect($query);

要:

$this->jobdetails = $getdata->dbconnect($query);