Статичный класс для соединения с базой данных

Рейтинг: 0Ответов: 1Опубликовано: 22.03.2015

Вот простой класс, который должен подключаться к базе данных и посылать запросы. Мне нужно, чтобы класс был статическим, то есть чтобы можно выполнять запросы так:

$result = SQL::Query($string);

Но при этом я хочу, чтобы при загрузке страницы устанавливалась одна связь с БД (приватная переменная в классе SQL), и все запросы, осуществляющиеся на этой странице, шли через неё. Чтобы не устанавливать каждый раз при посылке запроса подключение к БД. Это вообще возможно?

Я думал решить это так:

private static $connection;
private static $defaultArgs;
...
public static function Connect(array $args) {
    self::$connection = @new mysqli($args[0], $args[1], $args[2], $args[3]);
    // проверки на ошибки подключения и загрузку набора символов utf-8
}
public static function Query($string) {
    if(!self::$connection || is_null(self::$connection)) {
       self::$connection = self::Connect($defaultArgs);
    }
    return self::$connection->query($string);
}

Но переменная $connection всегда остается равной NULL, она даже не инициализируется. Я понимаю, что напутал со статичностью; как сделать так, чтобы подключаться приходилось лишь единожды, но экземпляр класса не создавать, чтобы иметь возможность пользоваться статичными методами без создания переменных вне класса?

Ответы

▲ 1
self::$connection = @new mysqli($args[0], $args[1], $args[2], $args[3]);

Вы уверены, что ваше соединение прошло успешно?

self::$connection = new mysqli($args[0], $args[1], $args[2], $args[3]);
if (!self::$connection) throw new Exception('error');

И посмотрите, что у вас за ошибки вываливаются.