0

私は次のコードを持っています

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

4

2 に答える 2

0

$this->db同じ$thisコンテキストでメソッドに渡すのはなぜですか?$this->db子クラスに設定してから電話してみませ$this->updateんか?どちらも親クラスで定義されているため、これを行うのに問題はありません。エラー自体については、外部変数のアドレス割り当てでプライベートメンバーを設定しようとしているため、後でプライベートメンバーアドレスを指定したい変数を介してオブジェクトのプライベートメンバーにアクセスすることができます。

于 2012-12-25T12:37:03.507 に答える
0

それはメソッド$dbがないからです。実際に設定されており、メソッドを持つオブジェクトのものですかquery()$this->dbquery()

デバッグを行います。

var_dump($this->db);
于 2012-12-25T10:39:02.470 に答える