0

この親クラスを作成しました

class DBMysqli {
    private $mysqli;

    function __construct($Mysqli) {
        $this->mysqli = $Mysqli;
    }

     public function GET($queryArr){

        $query = "SELECT ";

       ...

        $result = $this->mysqli->query($query); //Here I get a run time error!!
        echo $this->mysqli->error;

        return $result;
   }
}

と子供クラス

class FolderComment extends DBMysqli{

    protected $data;

    public function __construct() {
        $this->mysqli = DB::Simulator(); //works, initiliaze $mysqli
        $table = array(
            'tables' => 'folder_comments',
            'conditions' => '1'
        );

        $this->data = $this->GET($table);
    }
}

$this->mysqliがnullであるという実行時エラーが発生します。しかし、私はそれを子クラスに設定しました。これはOOPの控えめな質問だと思います。

4

4 に答える 4

1

mysqliをプライベート変数にしたので、あなたが推測するように、それは子のコンストラクターに設定されていないと思います。子供がアクセスできるようにする場合は、保護する必要があります。

したがって、代わりに何が起こっているのかというとmysqli、最初から親からプライベートフィールドを継承したことがないため、子クラスにという新しい変数を作成しているということです。

もう1つのオプションは、親のコンストラクターを暗黙的に呼び出して、mysqli変数を送信することです。

于 2012-10-02T16:43:17.077 に答える
1

変化する

private $mysqli;

protected $mysqli;

プレントクラスで

于 2012-10-02T16:44:12.520 に答える
1

mysqliオブジェクトを親クラスに渡す必要があります

   public function __construct() {
        parent::__construct(DB::Simulator());
        $table = array(
            'tables' => 'folder_comments',
            'conditions' => '1'
        );

        $this->data = $this->GET($table);
    }
于 2012-10-02T16:44:51.147 に答える
0

DBMysqliあなたはである必要があり$mysqliますprotected、ではありませんprivate

class DBMysqli {
    protected $mysqli;
    //...

Privateは、外部または継承されたアクセスが禁止されていることを示し、protectedは、外部アクセスは禁止されているが、継承されたオブジェクトはプロパティにアクセスできることを示します。

于 2012-10-02T16:43:55.767 に答える