Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: ООП в php

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Класс работы с базой данных
Toxa
Отправлено: 27 Мая, 2010 - 16:34:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


Давно хотел поговорить на эту тему. Интересно, каким образом вы осуществляете работу с БД? Ну то, что отдельным классом, это и ежу понятно. Меня же интересует структура общего макета сайта. Например:
PHP:
скопировать код в буфер обмена
  1. // Вначале у меня идет класс Session, который отвечает за создание сессии,    
  2. //определение локали, подсчет трафика и много чего еще
  3. $session = new Session();
  4.  
  5. $session->timeStart();
  6. $session->sessionRegister();

Далее постепенно начинает выводиться контент
PHP:
скопировать код в буфер обмена
  1. // Поскольку каждая страница сайта создается по шаблону,
  2. // нужно брать заголовки из БД
  3.  
  4. $header = new Header();
  5.  
  6. if(isset($header->title)) {
  7.     $header->displayTitle();
  8. } else {
  9.     $header->setTitle("unnamed page");
  10. }


Ну и так далее. Потом идет непосредственно основной контент, где тоже куча запросов к БД. Впрочем, кому я рассказываю. В общем, погуглив на данную тему я остановился на двух вариантах:
1) Делаем обычный класс, передаем его экземпляр во все остальные классы, или же просто делаем его родителем всех остальных классов.
2) Объявляем класс для работы с БД как статический. В этом случае его можно использовать где угодно и когда угодно без создания экземпляров, но при таком подходе создается излишняя задержка, т.к. статические классы работают медленнее.

Можно еще в каждом классе отдельно создавать экземпляры класса БД, но что-то мне подсказывает, что это маразм.
Кто что думает по этому поводу, кто как делает, поделитесь навыками, не стесняйтесь!


-----
Удобный сервис для хранения файлов
 
 Top
Champion Супермодератор
Отправлено: 27 Мая, 2010 - 19:37:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Toxa пишет:
каким образом вы осуществляете работу с БД? Ну то, что отдельным классом, это и ежу понятно.
А зачем нужен обязательно отдельный класс? Работа с БД обычно - это 3 строчки кода коннекта, вынесенные в отдельный файл и куча mysql_query в нужных местах. Зачем тут класс?

Создавать в каждом классе новый экземпляр другого класса, который не нужен в таких количествах - это конечно худший вариант, он ем и думать не надо.
 
 Top
Toxa
Отправлено: 27 Мая, 2010 - 20:13:32
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


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


-----
Удобный сервис для хранения файлов
 
 Top
Toxa
Отправлено: 28 Мая, 2010 - 02:22:02
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


уже три часа ночи, а я все никак не могу успокоиться.
Скачал CMS mkportal. Там тупо во всех функциях всех классов, где нужна работа с БД (а это 90%) объявлена переменная $DB как global !


-----
Удобный сервис для хранения файлов
 
 Top
JustUserR
Отправлено: 28 Мая, 2010 - 14:36:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Toxa Использование классов и ООП действительно полезно поскольку помогает структуризировать код и сделать требуемую инкапсуляцию - но при этом гораздо важнее соблюдать саму ООП-парадигму и к примеру не включить одни экземпляры классов в другие используя заместо них наследование и интерфейсы
Также нельзя сказать чтобы статические функции работали медленее - ведь по сути в PHP отсутствуют именные и пакетные области видимости как таковые и хороший способ создать их это расширить обращение к функции как в статическому методу класса - не зря для этой операции служит оператор :: расширения текущей области видимости - и таким образом статическая переменная или метод есть не что иное как соответствующие объект в определенной области имен А вот динамические свойства и методы уже требуют связи с определенным экземпляром класса и их выполнения в его контексте - на переключение которого требуется некоторое время


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Toxa
Отправлено: 28 Мая, 2010 - 15:01:47
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


JustUserR, спасибо конечно, но все это я уже читал в книжках и не один раз.


-----
Удобный сервис для хранения файлов
 
 Top
JustUserR
Отправлено: 28 Мая, 2010 - 15:25:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Toxa пишет:
JustUserR, спасибо конечно, но все это я уже читал в книжках и не один раз.
Пожалуйста! Кстати как вариант для работы с БД можете использовать встроенный в PHP класс mysql - и хранить его экземпляры в глобальном массиве и по надобности обращаться к ним из кода


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
pitbul
Отправлено: 28 Мая, 2010 - 16:29:31
Post Id


Новичок


Покинул форум
Сообщений всего: 26
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Можно попробовать поюзать PDO или ADOdb. Ничего самому не надо писать , готовые классы и методы.

(Отредактировано автором: 28 Мая, 2010 - 16:31:57)

 
 Top
Toxa
Отправлено: 28 Мая, 2010 - 16:52:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


Видел эти классы, много лишнего там. А самому можно написать именно то, что нужно.


-----
Удобный сервис для хранения файлов
 
 Top
JustUserR
Отправлено: 28 Мая, 2010 - 16:58:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




pitbul пишет:
Можно попробовать поюзать PDO или ADOdb. Ничего самому не надо писать , готовые классы и методы.
А при работе на PHP под windows-сервер с базой данных типа Microsoft SQL server можно использоывть напрямую OLE-взаимодействие - благо каждый компонент от microsoft его предоставляет


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB