#121 

TheDark
Знаток
Зарегистрирован: 2010-08-01
Сообщений: 1540
На форуме: 517 час.
Репутация: 109 (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
Сообщений: 8455
На форуме: 793 час.
Репутация: 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
Сообщений: 1540
На форуме: 517 час.
Репутация: 109 (88%) ±
Инфо  Написать

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

Неактивен

#124 

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

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

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

Что за магия?

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

Неактивен

#125 

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

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


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

Неактивен

#126 

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

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

Неактивен

[ Generated in 0.008 seconds, 11 queries]