#121 

TheDark
Знаток
Зарегистрирован: 2010-08-01
Сообщений: 1532
На форуме: 513 час.
Репутация: 108 (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
Сообщений: 8448
На форуме: 791 час.
Репутация: 764 (94%) ±
Инфо  Вебсайт  Написать

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

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

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

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

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


Пишу на C++ за еду

Неактивен

#123 

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

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

Неактивен

[ Generated in 0.006 seconds, 11 queries]