![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| SqueeZe |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 1.10.2007 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Здравствуйте.
Пишу свою CMS с помощью ООП [PHP + MySQL]. Это уже вторая версия =) (Первую я снес вместе с форматированием С: Столкнулся с некоторой сложностью... Суть в чем. Существует класс LDB для работы с MySQL. В нем всякие полезные методы, подключение[!] итд:
Есть основной класс.
И есть множество отдельных подключаемых классов для разных функций. Примером может служить класс Session:
Так вот! Мне нужно в классе Session работать с MySQL. 1. Создавать там экземпляр класса LDB имхо неправильно, тк придется во всех классах где я работаю с базой создавать по экземпляру... 2. Создать экземпляр в Index. Но тогда придется ведь его передавать по ссылке при создании экземпляра Session. Верно/ неверно? 3. Сделать экземпляр глобальным вне классов. 4. Другие варианты? Что можете подсказать по этой теме? Заранее благодарен. |
||||||
|
|||||||
| krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
Вам необходимо разделить клас для работы с базой данных на два один будет устанавливать соединение другой будет выполнять запросы. Вам необходимо сделать класс устанавливающий соединение используя патерн проектирования Одиночка тогда он будет доступен в любом месте кода. Клас исполняющий запросы просто будет использовать клас соединения в своей работе.
|
|||
|
||||
| SqueeZe |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 1.10.2007 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Отличная идея. Спасибо. Щас попробую переписать по такой схеме.
|
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Как вариант: создаем глобальный объект от классы БД, затем ссылку на него кидаем в свойство (любое) всех других объектов.
|
|||
|
||||
| SqueeZe |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 1.10.2007 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Вот что получилось. Так - решил для галочки отписаться. =)
Соответственно буду в каждом классе, где нужно пользовать базу создавать экземпляр класса LDB, а уж он сам разберется, надо ли подключаться =) По поводу варианта от Mal Hack: Те это будет выглядеть приблизительно так?
Это сообщение отредактировал(а) SqueeZe - 21.12.2007, 17:53 |
||||
|
|||||
| Glip |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 473 Регистрация: 30.12.2006 Репутация: 7 Всего: 18 |
могу оказаться не правым, но разве при такой реализации каждый новый экземляр не класса LDB не будет каждый раз коннектиться?
то есть при создании экземпляра класса каждый раз при вызове new LDB $this->serverConnected === false. поправьте если не прав. Добавлено через 2 минуты и 12 секунд посмотрите как сказал krundetz, реализацию Singleton |
|||
|
||||
| SqueeZe |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 1.10.2007 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Да. Ты прав. Была у меня такая мыслеха, но я на что то отвлекся... Ща покумекаю. Статичным его что ли сделать?
Добавлено через 5 минут и 53 секунды
Вот так вроде будет работать. |
|||
|
||||
| KEM |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 28.1.2005 Репутация: нет Всего: 2 |
Вот класс который я использую, может понравиться и пригодится кому
--------------------
Мы растворяем сознание жизни, реальностью стал бешеный ритм... |
|||
|
||||
| vasac |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 8 Всего: 36 |
А вот класс, который я использую — http://pyha.ru/forum/topic/413.0 (совершенно наглая реклама). Тоже может пригодится.
Там же есть одно из возможных решений вашей проблемы (как пример). Делать же, как вы сейчас придумали одно статичное поле, смысла ноль. Тогда объекты вообще не нужны, делайте тогда весь класс статическим. |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Да, я имел ввиду именно такую реализацию. С точки зрения оптимальности и ичитаемости лучше всего
. |
|||
|
||||
| SqueeZe |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 1.10.2007 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Хм. Я вот честно говоря вот чего понять не могу. Зачем использовать такие сложные классы для работы с БД. Ведь вот например, что мне нужно от сего класса:
1. Возможность выполнить запрос с его подсчетом. 2. Удобный доступ к Select Update Delete Insert 3. Фильтрацию запроса от зловредностей всяких =) И все! Я наверное чайник.. Пришел тут незнающий, руками машу, а толку 0... Я не вижу смысла в сложнейших реализациях. Вот к примеру класс, что предложил тов. KEM: Ну и нахрена мне методы которые запрашивают имя хост пароль итд.. Где я буду этим пользоваться? |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
SqueeZe, по хорошему, вам нужно PDO, с учетом последних требований, и небольшая обертка для него, для более тесной интеграции с вашим приложением...
Это наиболее оптимальный вариант уж если говорить, положа руку на сердце.. А потом, простите, как спросили, так вам и ответили... |
|||
|
||||
| SqueeZe |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 1.10.2007 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Сорри, если немного погорячился. Просто видимо не допонял некоторые моменты. Зеленый я еще. Но нужно искать, думать... Без этого никак [На самом деле люблю комфортные, грамотные и конструктивные общения].
Ну это отступление. Сразу скажу спасибу тов. Mal Hack за оперативные ответы. =) Долго думал над вашим постом. Не знаю про PDO (уй, щас ногами бить будут, САПОГАМИ --------------------------------- Так. С общими принципами PDO разобрался. Вот только где бы пример посмотреть. Для простейшей работы с базой. Это сообщение отредактировал(а) SqueeZe - 22.12.2007, 01:38 |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
mysqli - скорее часть PDO, а сам PDO - тот самый класс, который вы сами пишете. Точнеее их там как бы два, один отвечает за выполнение запросов, второй за парсинг данных.
Вот, почитайте: http://ru2.php.net/pdo Сразу скажу, с полвинка в это не вьехать, сам разбирался что за зверь и что дает двое суток, но копаться в этом стоит. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |