Используя класс базы данных в моем пользовательском классе

В моем проекте у меня есть класс базы данных, который я использую для обработки всего материала MySQL. Это соединяется с базой данных, запросами выполнений, фиксирует ошибки и закрывает соединение.

Теперь я должен создать членскую область на своем сайте, и я собирался создать пользовательский класс, который обработает регистрацию, вход в систему, изменения/сброс пароля/имени пользователя и выходить из системы. В этом пользовательском классе я должен использовать MySQL по очевидным причинам..., который является тем, для чего был сделан мой класс базы данных.

Но я смущен относительно того, как я использовал бы свой класс базы данных в моем пользовательском классе. Я хотел бы создать новый объект базы данных для своего пользовательского класса и затем иметь его близко каждый раз, когда метод в том классе закончен? Или сделайте я так или иначе делаю 'глобальный' класс базы данных, который может использоваться всюду по моему всему сценарию (если это верно, я нуждаюсь в помощи с этим, никакая идея, что сделать там.)

Спасибо за любую обратную связь можно дать мне.

7
задан Jordan Running 5 April 2010 в 02:22
поделиться

4 ответа

Простой, трехэтапный процесс. 1 / Создайте объект базы данных. {{1} } 2 / Передайте его конструктору пользовательского класса. 3 / Используйте его в пользовательских методах.

Маленький пример.

Файл Database.class.php:

<?php
class Database{
  public function __construct(){
    // Connects to database for example.
  }

  public function query($sqlQuery){
    // Send a query to the database
  }
  [...]
}

В User.class.php:

<?php

class User{
  private $_db;
  public function __construct(Database $db){
    $this->_db = $db;
  }

  public function deleteUser(){
    $this->_db->query('DELETE FROM Users WHERE name = "Bobby"');
  }
}

Теперь, например, в userManager.php:

<?php
$db = new Database();
$user = new User($db);
// Say bye to Bobby :
$user->deleteUser();

Если вам нужно текущее модное название этой старой техники, погуглите "Dependency" Инъекция ». Паттерн Синглтон в php скоро исчезнет.

22
ответ дан 6 December 2019 в 07:25
поделиться

Что мне нравится делать, так это создавать класс базы данных с учетом шаблона Singleton . Таким образом, если у вас уже есть объект базы данных, он просто извлекает его, в противном случае создает новый. Например:

Database.class.php

class Db
{
    protected static $_link;

    private function __construct()
    {
        // access your database here, establish link
    }

    public static function getLink()
    {
        if(self::_link === null) {
            new Db();
        }
        return self::_link;
    }

    // etc.

}


User.class.php

class User
{
    protected $_link;    // This will be the database object
    ...

    public function __construct()
    {
        $this->_link = Db::getLink();
    }

}

И теперь вы можете использовать свойство $ _ link пользователя для выполнения функций базы данных, таких как $ this -> _ link-> query (.. .) . Вам не обязательно помещать Db :: getLink () в конструктор, если вашему классу не нужно так много взаимодействовать с базой данных.

1
ответ дан 6 December 2019 в 07:25
поделиться

Поскольку вы используете базу данных как объект, почему бы просто не добавить к объекту методы, которые ваш «класс пользователей» может использовать для выполнения необходимых действий. Класс пользователей может содержать указатель на класс базы данных. Класс базы данных будет защищать вашу базу данных и гарантировать, что класс пользователей использует ее надлежащим образом.

0
ответ дан 6 December 2019 в 07:25
поделиться

Как он сказал, поместите все свои функции в класс базы данных и используйте объект базы данных для доступа к этим функциям из вашего пользовательского класса. Это должен быть лучший метод в вашем случае. Например:
global $ database;
userclassvar = $ database-> doSomething (); {{1 }}

1
ответ дан 6 December 2019 в 07:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: