关于mysqli的PHP继承

标签 php mysql mysqli scope

我创建了一个名为 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 的类,它扩展了 Database

class Model {

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

还有一个扩展模型的类 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,但我不确定如何引用它。我已经尝试了一切,但似乎没有任何效果。

附言 前两个类在我的应用程序中始终是必需的,最后一个 registerModel 类是通过 Controller 调用的。这就是为什么我不在子类中构造父类。

最佳答案

让它成为 Database 类中的一个字段:

class Database extends mysqli {
    <strong>public $mysqli;</strong>

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

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

然后你可以这样引用它:

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

但是你还需要保留父构造函数:

echo "This is the register Model";
<strong>parent::__construct();</strong>

最后,您的数据库不应该扩展mysqli因为您实际上并没有使用它遗产;您正在创建一个完全不同的对象。

关于关于mysqli的PHP继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897379/

相关文章:

php - 如何检测 MySQL 数据库是否正在运行?

php - 为什么此 UPDATE 准备语句不起作用,但在 SQL 数据库中使用时有效

php - 使用 .val() 检查多文件上传文件的表单值

PHP fatal error : "Can' t use method return value in write context in. ...“

php - Left Join获取上一条记录sql

mysql - SQL 查询以显示包括产品图像在内的最新订单信息 (Prestashop)

mysql - 在 MYSQL 中 UNION 三个不同的 SELECT

php - 从数据库中回显变量

php - Magento 以编程方式添加产品并重定向到结帐

javascript - 使用 Ajax 和对话框小部件