【发布时间】:2015-08-08 06:00:31
【问题描述】:
我开始学习如何在 PHP 中使用 OOP,目前我想创建一个如下所示的数据库类:
class Database{
//Database connection variables
private $DBHost = "localhost";
private $DBUser = "username";
private $DBPass = "password";
private $DBName = "database3";
public $DBCon;
public function __construct(){
$this->DBCon = new mysqli($this->DBHost,$this->DBUser,$this->DBPass,$this->DBName);
}
public function con(){
return $this->DBCon;
}
public function __destruct(){
$this->DBCon->close();
}
}
我正在尝试与另一个名为 Application 的类进行交互:
include('Database.php');
class Application{
public $DB;
public function __construct() {
$DB = new Database();
}
public function InsertName($Username){
var_dump($this->DB->con());
if($this->DB->con()->query("INSERT INTO Test (name) VALUES ($Username);") === TRUE){
echo "Okay";
}else{
echo "Error";
}
}
}
但我收到错误Call to a member function con() on a non-object
顺便说一句,这是在 OOP 中与数据库交互的合适方式吗?
【问题讨论】:
-
而不是
$this->DB->con()->query尝试$this->DB->query或$DB->query。请检查一次并告诉它是否正常工作? -
在您的 Application 类构造函数中,您正在使用
$DB = new Database();。它应该是$this->DB = new Database();,以便您稍后可以在插入函数中访问它。 -
@Adon 搞定了,构造实现错误。 DB在__construct中保存为局部变量而不是实例变量
-
您似乎也没有办法将连接详细信息传递给
Database构造函数。如何设置,例如DBHost?