Пользователь PHP-класс. Я должен подключиться к БД в этом классе?


У меня есть небольшой класс, который обрабатывает информацию пользователя. (имя, фамилия, логин, хэш пароля). Также этот класс может активировать, зарегистрироваться и войти пользователь. Это значит, что я должен подключиться к БД. Это нормально? Я использую базы данных mdb2 Груша для подключения к БД.

Это значит, что каждый пользователь будет иметь объект базы данных mdb2 инициализирован?

class User {
    private $login;
    private $hash;
    private $name;

    /* some getters and setters */
    //
    // public function get_name() { return $this->name }
    // ..
    //

    private $connect; // MDB2 connection
    private $dsn = ""; // connection config

    public function exists() { // return true if User exists
        require ('MDB2.php');
        $this->connect = MDB2::connect($this->dsn);
        // check
    }
}

Я должен сделать $подключение и $ДСН переменных статические? Или может быть я должен использовать некоторые шаблон для этой идеи?

Обновление: (вид решения)

Я храню подключения к базе данных в статической переменной:

class DataBase {
    // connections options
    static public $connect = NULL;      // MDB2 connection variable
    static public $dsn = "pgsql://user:pass@IP/database";
    static public $connected = false;

    static function reportError() {
        if (PEAR::isError(self::$connect)) {
            $res["success"]=false;
            $res["errors"][] = self::$connect->getMessage();
            echo json_encode($res);
            exit;
        }
    } //: reportError

} //: Class DataBase

Так что если я хочу подключиться к БД, я пишу:

// connect only if it's not connected
if (!DataBase::$connected) {
    require_once('MDB2.php'); // Pear MDB2 class
    DataBase::$connect = MDB2::factory(DataBase::$dsn); // connection
    DataBase::$connected = true; // Flag that we're already connected
}

Это нормально? Или я должен сделать это другим способом?



665
4
задан 29 апреля 2011 в 03:04 Источник Поделиться
Комментарии
1 ответ


Также этот класс может активировать, зарегистрироваться и войти пользователь. Это значит, что я должен подключиться к БД. Это нормально?

Это зависит от вас и ваших требований. Лично я пытаюсь сделать все доменные конкретные объекты как можно более простой и использовать его только как значение объекта. Так, в этом случае все действия, такие как проверка на существование, создание, активация, регистрация и т. д. должны перейти в другой класс, например, пользователь диспетчер или похожие. И в этом классе я буду держать ссылку на ДБ и все SQL-запросы.


Я должен сделать $подключение и $ДСН переменных статические?

Опять же, это зависит от ваших требований. Но с моей точки зрения -- нет, не стоит. При этом вы не можете иметь два разных подключения к MySQL и PostgreSQL, например.

В любом случае, я предлагаю, чтобы изменить общественное модификатор частная (или защищенные) за $подключение, $ДСН и $подключенных клиентов.

3
ответ дан 3 мая 2011 в 04:05 Источник Поделиться