#121 

TheDark
Знаток
Зарегистрирован: 2010-08-01
Сообщений: 1543
На форуме: 523 час.
Репутация: 110 (88%) ±
Инфо  Написать

Вопрос к знающим. По вашему опыту, как лучше организовать взаимодействие с БД, используя ООП?
Есть класс Database, в котором создается подключение к БД со всеми соответствующими методами (типо такого)

Как сделать запрос к БД из другого класса? Неужели в каждом классе нужно создавать новый экземпляр Database и делать новое подключение?
Сейчас у меня устроено так: есть основной класс Main, который единожды вызывается в index.php и в котором происходит что-то такое:

Затем из всех остальных классов я делаю запрос к БД методом Main::$db->query();
Да и вообще в класс Main вынес различные функции, которые могут быть использованы повсеместно, сделал их статическими и обращаюсь к ним все также через Main::function()

Это нормально или говнокод? Где-то читал, что статические методы и свойства рекомендуется использовать только в крайнем случае, а тут как бы на них все завязано (кроме Database, таким методом работаю с еще несколькими ключевыми классами).

Поделитесь, как делаете вы на практике.

Отредактированно TheDark (2017-11-07 13:20:14)

Неактивен

#122 

Trilby
miss me?
Имя: Алексей
Откуда: Default City
Зарегистрирован: 2006-08-01
Сообщений: 8457
На форуме: 794 час.
Репутация: 765 (94%) ±
Инфо  Вебсайт  Написать

У тебя в index.php должен подключаться файл-autoload (google://psr-4 autoload) и инициализироваться приложение.

Вот, например, мой немного обрезанный index.php:

Ну, а работу с бд можно запихнуть в singleton, после чего в классах писать что-то вроде:

А когда наиграешься со своими велосипедами, можешь подключить один из готовых ORM (Eloquent, Doctrine, или что-то еще) и работать с базой через него.

Отредактированно Trilby (2017-11-07 15:38:21)

Неактивен

#123 

TheDark
Знаток
Зарегистрирован: 2010-08-01
Сообщений: 1543
На форуме: 523 час.
Репутация: 110 (88%) ±
Инфо  Написать

Trilby, автолоад есть, синглтон - это тема, спасибо. а для велосипеда есть причины. в частности, мне нужен опыт проектирования приложений. начинать с фреймворков глупо.

Неактивен

#124 

TheDark
Знаток
Зарегистрирован: 2010-08-01
Сообщений: 1543
На форуме: 523 час.
Репутация: 110 (88%) ±
Инфо  Написать

Кто-то сталкивался с таким, что функция extract() не работает, если ее обернуть в другую функцию? Например:

Если же вызвать этот код напрямую в каждом нужном методе класса (а не $this->extractVars()), то все отработает:

Что за магия?

Отредактированно TheDark (2018-03-11 17:46:35)

Неактивен

#125 

Dimitry
Ниндзя по зачистке капусты
Имя: Дмитрий
Откуда: Германия
Зарегистрирован: 2003-04-18
Сообщений: 18645
На форуме: 1797 час.
Репутация: 1239 (99%) ±
Инфо  Вебсайт  Написать

Достаточно понимать что делает эта функция.
Она создаёт переменные из массива и так как ты вызываешь её в функции, то эти переменные будут доступны только в функции, а тебе они видимо нужны снаружи.


Моя анкета на vmeste.eu
Если сообщение Вам помогло, отблагодарите участника повысив его репутацию!
PS. То, что нас не убивает, то делает нас сильнее!

Активен

#126 

TheDark
Знаток
Зарегистрирован: 2010-08-01
Сообщений: 1543
На форуме: 523 час.
Репутация: 110 (88%) ±
Инфо  Написать

Dimitry, Все, я понял. Не подумал об области видимости...

Неактивен

#127 

TheDark
Знаток
Зарегистрирован: 2010-08-01
Сообщений: 1543
На форуме: 523 час.
Репутация: 110 (88%) ±
Инфо  Написать

Работаю сейчас над проектом, к которому хочу прикрутить платную подписку. Нужно сделать возможность оплаты на разные периоды (например, 1 мес, 6 мес, год и т.д.) и соответственно давать новый функционал оплатившим пользователям. У меня есть свое представление как это можно было бы организовать, но я такого еще не делал. Мог бы кто-то поделиться опытом, как организовать такое на своем проекте или где можно подробно почитать об этом от А до Я, best practices так сказать?

Неактивен

#128 

75859
Новичок
Имя: Николай
Откуда: Санкт-Петербург
Зарегистрирован: 2018-01-15
Сообщений: 2
На форуме: 0 час.
Репутация: 0 (50%) ±
Инфо  Вебсайт  Написать

И как, решили проблему?

Неактивен

#129 

✯ЯНОЧКА✯
Постоялец
Имя: Яна
Зарегистрирован: 2017-10-14
Сообщений: 255
На форуме: 69 час.
Репутация: 1 (60%) ±
Инфо  Написать

Сообщение от TheDark:

Работаю сейчас над проектом, к которому хочу прикрутить платную подписку. Нужно сделать возможность оплаты на разные периоды (например, 1 мес, 6 мес, год и т.д.) и соответственно давать новый функционал оплатившим пользователям. У меня есть свое представление как это можно было бы организовать, но я такого еще не делал. Мог бы кто-то поделиться опытом, как организовать такое на своем проекте или где можно подробно почитать об этом от А до Я, best practices так сказать?

https://ruseller.com/lessons.php?rub=30&id=942

Неактивен

#130 

✯ЯНОЧКА✯
Постоялец
Имя: Яна
Зарегистрирован: 2017-10-14
Сообщений: 255
На форуме: 69 час.
Репутация: 1 (60%) ±
Инфо  Написать

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

Неактивен

#131 

mychatik
Moderator
Имя: Геннадий
Зарегистрирован: 2016-04-24
Сообщений: 238
На форуме: 58 час.
Репутация: 19 (95%) ±
Инфо  Вебсайт  Написать

Сообщение от ✯ЯНОЧКА✯:

Кто нибудь может подсказать в чем ошибка. Должно запускаться вращение картинки и включаться радио по нажатию кнопки крутить пластинку.

Первая ошибка - если берётся откуда-то код, то его нужно для начала установить так, как в оригинале, а потом переделывать.
А в оригинале - скрипт ставится в самом конце, перед </body>.
После этого - пластинка начинает крутиться и включается музыка.

По кнопке "Остановить" - картинка останавливается, но музыка продолжает играть.
Почему - тут я не знаю.

Ну и ещё - для HTML5 и CSS3 нужно указывать только <!DOCTYPE html> для всех документов.

Неактивен

[ Generated in 0.008 seconds, 11 queries]