如何在php中使用父类的数据库对象

时间:2012-12-25 10:30:30

标签: php inheritance

我有以下代码

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

2 个答案:

答案 0 :(得分:0)

那是因为$db没有query()方法。是$this->db实际设置的是具有query()方法的对象吗?

做一些调试:

var_dump($this->db);

答案 1 :(得分:0)

为什么要将$this->db传递给同一$this上下文中的方法?为什么不在子类中设置$this->db然后调用$this->update?因为它们都是在父类中定义的,所以这样做应该没有问题。至于错误本身:您尝试使用外部变量的地址分配来设置私有成员,因此可以稍后通过您想要私有成员地址的变量访问对象的私有成员。