Я начинаю изучать, как использовать ООП в PHP, и пока я хочу создать класс базы данных, который выглядит следующим образом:
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
В качестве побочного примечания, является ли это подходящим способом взаимодействия с базой данных в ООП?
Внутри конструктора класса Application $DB
присваивается new Database()
.
В этом случае эта переменная рассматривается как локальная переменная с ее областью, являющейся самой конструкторской функцией.
Чтобы правильно присвоить новый объект базы данных public $DB
свойству public $DB
, вам нужно будет получить к нему доступ через объект $this
reference.
public function __construct() { $this->DB = new Database(); }
Таким образом, вы сможете получить доступ к надлежащему назначенному общедоступному свойству во всех остальных методах класса.
$DB
остается неинициализированной, а не экземпляром mysqli.
$this->DB->con()->query
попробуйте$this->DB->query
или$DB->query
Проверьте один раз оба и скажите, работает или нет?$DB = new Database();
, Это должно быть$this->DB = new Database();
так что вы можете получить к нему доступ позже в вашей функции вставки.