PHP:child中的未定义变量

时间:2014-12-21 07:56:15

标签: php

我有这个麻烦:在Model类中我创建了一个受保护的变量,但是在Model类的子类中,他不可用。

class Model{

protected $db = null;   

public function __construct(){
    require_once 'app/classes/db.php';
    $db = new DB();
}
}

这是他们的孩子:

    class Model_Main extends Model{

    public function get_data(){
        $db->select('news');
    }
}

错误:

  

注意:未定义的变量:第5行的/var/www/localhost/htdocs/app/models/model_main.php中的db

     

致命错误:在第5行的/var/www/localhost/htdocs/app/models/model_main.php中调用null上的成员函数select()

2 个答案:

答案 0 :(得分:2)

在两个班级中将$db更改为$this->db

class Model
{
    protected $db = null;   

    public function __construct()
    {
        require_once 'app/classes/db.php';
        $this->db = new DB();
    }
}

class Model_Main extends Model
{
    public function get_data()
    {
        $this->db->select('news');
    }
}

如果您没有在子类中显式定义构造函数,则会隐式调用父构造函数。因此,在这种情况下不需要parent::__constructor()调用。

有关构造函数的更多信息:http://php.net/oop5.decon

答案 1 :(得分:0)

$db=new DB()位于父构造函数中,必须首先调用。