我创建了一个名为 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/