<MyRusakov.ru />

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

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

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

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

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

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

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

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

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

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

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

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

Создание объекта в классе БД
14.04.2012 23:01:13 Создание объекта в классе БД Сообщение #1
brussens

brussens

Мега-мастер

Мега-мастер

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

Сообщений: 438

Михаил, вот есть класс работы с БД
<?php
class DB {
private static $msqlicnct;
private function __construct() {
self::$msqlicnct = new Mysqli('localhost', 'root', '', 'beatzone');
return self::$msqlicnct;
}
public static function select() {
new DB();
$b = self::$msqlicnct->query("SELECT * FROM users WHERE id = '2'"->fetch_assoc();
print_r($b);
}
}
DB::select();
?>

класс основан на синглтоне, только вот хотелось бы new DB(); не дублировать в каждом новом методе класса, как его можно создавать один раз? Заранее спасибО)
Профиль Ответить
15.04.2012 13:48:47 Создание объекта в классе БД Сообщение #2
Admin

Admin

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

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

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

Сообщений: 3063

Это какой-то испорченный singleton. Надо создать всего 1 статический метод, который создаёт новый объект и записывает в поле, либо если он уже существует возвращает его из поля. Все остальные методы должны быть нестатическими. Вызывали метод, появился объект, а дальше к нему применяете все необходимые методы.
Профиль Ответить
15.04.2012 15:29:36 Создание объекта в классе БД Сообщение #3
brussens

brussens

Мега-мастер

Мега-мастер

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

Сообщений: 438

Ведь по сути то по синглтону конструктор должен быть private, а статичный метод его создаёт, так ведь? Как тогда обратиться к статическому свойству класса? Ведь если конструктор привэйт, то нельзя создавать объект напрямую
Профиль Ответить
15.04.2012 15:30:58 Создание объекта в классе БД Сообщение #4
Admin

Admin

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

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

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

Сообщений: 3063

К нему надо обратиться только 1 раз в методе, создающем объект. Все остальные методы (уже нестатические) к данному полю вообще не должны обращаться.
Профиль Ответить
15.04.2012 15:52:47 Создание объекта в классе БД Сообщение #5
brussens

brussens

Мега-мастер

Мега-мастер

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

Сообщений: 438

Михаил, по вашему совету исправил ошибки, только вот как тогда обращаться уже непосредственно к самому объекту Mysqli, для выполнения query()?
Через конструкцию в методе insertos() не получается, пишут ошибку наличия метода.
Вот исправленный кодclass DB {
private static $msqlicnct;
private function __construct() {
new Mysqli('localhost', 'root', '', 'beatzone');
}
public static function select() {
if ( is_null(self::$msqlicnct) ) {
self::$msqlicnct = new DB();
}
return self::$msqlicnct;
}
public function insertos() {
$b = self::select();
$b->query("SELECT * FROM users WHERE id = '2'"->fetch_assoc();
echo $b['name'] . " " . $b['secondname'];
}
}
DB::select()->insertos();
Профиль Ответить
15.04.2012 16:33:16 Создание объекта в классе БД Сообщение #6
brussens

brussens

Мега-мастер

Мега-мастер

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

Сообщений: 438

Михаил, посидел, потупил, вот вроде понял, всё работает, скажите, какие замечания есть?
class DB {
private static $msqlicnct = NULL;
private function __construct() {
$this->db = new Mysqli('localhost', 'root', '', 'beatzone');
}
private function __clone() {}
private function __wakeup() {}
public static function select() {
if ( is_null(self::$msqlicnct) ) {
self::$msqlicnct = new DB();
}
return self::$msqlicnct;
}
public function insertos() {
$b = $this->db->query("SELECT * FROM users WHERE id = '2'"->fetch_assoc();
echo $b['name'] . " " . $b['secondname'];
}
}
DB::select()->insertos();
Профиль Ответить
15.04.2012 17:22:36 Создание объекта в классе БД Сообщение #7
Admin

Admin

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

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

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

Сообщений: 3063

Теперь всё хорошо, только вот так писать можно, если Вы вызываете объект всего 1 раз:
DB::select()->insertos();
В противном случае, надо просто записать объект в переменную и дальше уже применять методы:
$db = DB::select();
$db->insertos();
$db->insertos();
Профиль Ответить
15.04.2012 17:26:19 Создание объекта в классе БД Сообщение #8
brussens

brussens

Мега-мастер

Мега-мастер

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

Сообщений: 438

Спасибо Михаил)) Это просто каркас))) Далее уже методы будут дописываться и класс будет использоваться для всего проекта)
Профиль Ответить