3

Database という名前のクラスを作成しました。

class Database extends mysqli {

    public function __construct() {
        parent::__construct();
        $mysqli = new mysqli(DBHOST, DBUSER, DBPASSWORD, DBDATABASE);

        if (mysqli_connect_errno()) {
            printf("Connect failed: %s\n", mysqli_connect_error());
            exit();
        }
    }   
}

そして、Database を拡張する Model というクラス

class Model {

    function __construct() {
        $this->db = new Database();        
    }
}

そしてModelを拡張するクラスregisterModel

class registerModel extends Model {

    public function __construct() {
        echo "This is the register Model";
    }

    public function register(//VARIOUS PASSED VALUES) {
        **$stmt = $mysqli->prepare("INSERT INTO users (firstName, lastName) values (?, ?)");**
        ...
        ... More Code
        ...

    }

私がやろうとしているのは$mysqli、元の Database クラスから取得することですが、それを参照する方法がわかりません。私はすべてを試しましたが、何もうまくいかないようです。

PS 最初の 2 つのクラスは常にアプリケーションに必要であり、最後の registerModel クラスはコントローラーを介して呼び出されます。これが、サブクラスで親を構築しない理由です。

4

2 に答える 2

2

Databaseクラス内のフィールドにします。

class Database extends mysqli {
    public $mysqli;

    public function __construct() {
        parent::__construct();
        $this->mysqli = new mysqli(DBHOST, DBUSER, DBPASSWORD, DBDATABASE);

        if (mysqli_connect_errno()) {
            printf("Connect failed: %s\n", mysqli_connect_error());
            exit();
        }
    }   
}

次に、次のように参照できます。

$stmt = $this->db->mysqli->prepare("INSERT INTO users (firstName, lastName) values (?, ?)");

ただし、親コンストラクターも保持する必要があります。

echo "This is the register Model";
parent::__construct();

最後に、Databasemysqli実際にはその継承を使用しないためクラスはextendsすべきではありません。まったく別のオブジェクトを作成しています。

于 2012-12-16T00:13:41.503 に答える
2

登録モデルでは、コンストラクターは親コンストラクターを呼び出す必要があります

<?php
class registerModel extends Model {
public function __construct() {
    echo "This is the register Model";
    parent::__construct();
}

そして、そこからアクセスできます

$this->db
于 2012-12-16T00:14:25.177 に答える