我有这个麻烦:在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()
答案 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()
位于父构造函数中,必须首先调用。