Вызов функции-члена для необъекта с mysqli

1

Я начинаю изучать, как использовать ООП в 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

В качестве побочного примечания, является ли это подходящим способом взаимодействия с базой данных в ООП?

  • 1
    Вместо $this->DB->con()->query попробуйте $this->DB->query или $DB->query Проверьте один раз оба и скажите, работает или нет?
  • 1
    Внутри вашего конструктора класса приложения вы используете $DB = new Database(); , Это должно быть $this->DB = new Database(); так что вы можете получить к нему доступ позже в вашей функции вставки.
Показать ещё 2 комментария
Теги:
oop
mysqli

1 ответ

0

Внутри конструктора класса Application $DB присваивается new Database().

В этом случае эта переменная рассматривается как локальная переменная с ее областью, являющейся самой конструкторской функцией.

Чтобы правильно присвоить новый объект базы данных public $DB свойству public $DB, вам нужно будет получить к нему доступ через объект $this reference.

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

Таким образом, вы сможете получить доступ к надлежащему назначенному общедоступному свойству во всех остальных методах класса.

  • 0
    верный. его проблема в том, что переменная $DB остается неинициализированной, а не экземпляром mysqli.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню