<MyRusakov.ru />

Создание крупного проекта на Java с нуля

Создание крупного проекта на Java с нуля

Данный курс научит Вас создавать крупные проекты на Java грамотно и быстро. В курсе Вы увидите создание большой и сложной программы на Java абсолютно с нуля.

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

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

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Класс БД на Singleton
30.06.2012 16:00:58 Класс БД на Singleton Сообщение #1
brussens

brussens

Мега-мастер

Мега-мастер

Дата регистрации:
11.10.2011 22:50:07

Сообщений: 438

Михаил, собственно имею вот такой класс основанный на Singleton
<?php
class DB {
private static $msqlicnct = NULL;
private function __construct() {
$this->db = new Mysqli('localhost', 'root', '', 'steel');
$this->db->query("SET lc_time_names = 'ru_RU'";
$this->db->query("SET NAMES 'utf8'";
}
private function __clone() {}
private function __wakeup() {}
public static function select() {
if ( is_null(self::$msqlicnct) ) {
self::$msqlicnct = new DB();
}
return self::$msqlicnct;
}
public function selectForums() {//извлечение всех форумов
$b = $this->db->query("SELECT * FROM forums ORDER BY pn";
return $b;
}
public function selectForumRazdels($id) {//извлечение разделов форума по id форума
$b = $this->db->query("SELECT * FROM razdels WHERE forum_id = '" . $id . "' ORDER BY pn";
return $b;
}
public function selectThemeNum($id) {//информация о количестве тем в разделе
$b = $this->db->query("SELECT COUNT(*) FROM `themes` WHERE `razdel_id`='" . $id . "'";
return $b;
}
public function selectTopicNum($id) {//информация о количестве топиков в разделе
$b = $this->db->query("SELECT COUNT(*) FROM `topics` WHERE `razdel_id`='" . $id . "'";
return $b;
}
}
?>

Хочу сделать автоматическое отключение от БД ($Mysqli->close()
Как лучше сделать его? Через приватный деструктор?
Профиль Ответить
30.06.2012 16:13:06 Класс БД на Singleton Сообщение #2
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Да, через деструктор надо это делать.
Профиль Ответить
30.06.2012 16:15:00 Класс БД на Singleton Сообщение #3
brussens

brussens

Мега-мастер

Мега-мастер

Дата регистрации:
11.10.2011 22:50:07

Сообщений: 438

А как быть, если public function __destruct работает, а private function __destruct выдаёт ошибку Warning: Call to private DB::__destruct() from context '' during shutdown ignored in Unknown on line 0
Профиль Ответить
30.06.2012 16:23:21 Класс БД на Singleton Сообщение #4
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Попробуйте сделать его protected, а затем, если работать не будет, то public.
Профиль Ответить
30.06.2012 16:25:21 Класс БД на Singleton Сообщение #5
brussens

brussens

Мега-мастер

Мега-мастер

Дата регистрации:
11.10.2011 22:50:07

Сообщений: 438

пробовал, выдаёт ту же ошибку... public та всё хорошо, да только за безопасность я боюсь
Профиль Ответить
30.06.2012 16:55:19 Класс БД на Singleton Сообщение #6
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Никакой опасности нет, тем более, невозможно использовать private, поскольку вызывается этот метод в том объекте, который его использует. Разумеется, private другой объект вызвать не может, отсюда и ошибка.
Профиль Ответить
30.06.2012 18:04:14 Класс БД на Singleton Сообщение #7
brussens

brussens

Мега-мастер

Мега-мастер

Дата регистрации:
11.10.2011 22:50:07

Сообщений: 438

А, вон оно что) Ну тогда я спокоен) Спасибо)
Профиль Ответить