我有以下代码
class Application
{
protected $db;
public function getDBChange(database $db)
{
$this->db =& $db;
$this->update($db);
}
protected function update($db)
{
$this->db=& $db;
echo "\nServer - update- IN";
$SQL = "UPDATE `version` SET app_ver='1.0.6'";
if (!$this->db->query($SQL))
{
echo "\nDatabase Error.";
}
echo "\nServer - update- OUT";
}
}
它工作正常但是当我从子类调用此更新函数时,它给出了子类的错误,如下所示
class DemoApplication extends Application
{
callParent()
{
$this->update($this->db);
}
}
当我使用这种方式时,它会给出错误Fatal error: Call to a member function query() on a non-object in
答案 0 :(得分:0)
那是因为$db
没有query()
方法。是$this->db
实际设置的是具有query()
方法的对象吗?
做一些调试:
var_dump($this->db);
答案 1 :(得分:0)
为什么要将$this->db
传递给同一$this
上下文中的方法?为什么不在子类中设置$this->db
然后调用$this->update
?因为它们都是在父类中定义的,所以这样做应该没有问题。至于错误本身:您尝试使用外部变量的地址分配来设置私有成员,因此可以稍后通过您想要私有成员地址的变量访问对象的私有成员。