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();
        }
    }   
}

还有一个扩展数据库的名为 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从原始数据库类中获取,但我不确定如何引用它。我已经尝试了一切,但似乎没有任何效果。

PS 在我的应用程序中总是需要前两个类,最后一个 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();

最后,你的Database不应该extend mysqli因为你实际上并没有使用那个继承;您正在创建一个完全不同的对象。

于 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 回答