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
Форумы портала PHP.SU :: Версия для печати :: ООП в php
Форумы портала PHP.SU » PHP » Программирование на PHP » ООП в php

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

1. Toxa - 27 Мая, 2010 - 16:34:01 - перейти к сообщению
Давно хотел поговорить на эту тему. Интересно, каким образом вы осуществляете работу с БД? Ну то, что отдельным классом, это и ежу понятно. Меня же интересует структура общего макета сайта. Например:
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) Объявляем класс для работы с БД как статический. В этом случае его можно использовать где угодно и когда угодно без создания экземпляров, но при таком подходе создается излишняя задержка, т.к. статические классы работают медленнее.

Можно еще в каждом классе отдельно создавать экземпляры класса БД, но что-то мне подсказывает, что это маразм.
Кто что думает по этому поводу, кто как делает, поделитесь навыками, не стесняйтесь!
2. Champion - 27 Мая, 2010 - 19:37:10 - перейти к сообщению
Toxa пишет:
каким образом вы осуществляете работу с БД? Ну то, что отдельным классом, это и ежу понятно.
А зачем нужен обязательно отдельный класс? Работа с БД обычно - это 3 строчки кода коннекта, вынесенные в отдельный файл и куча mysql_query в нужных местах. Зачем тут класс?

Создавать в каждом классе новый экземпляр другого класса, который не нужен в таких количествах - это конечно худший вариант, он ем и думать не надо.
3. Toxa - 27 Мая, 2010 - 20:13:32 - перейти к сообщению
ну как же, а обработка ошибок? а плейсхолдеры? а логи наконец?.. Я пока что остановился на статическом варианте.
4. Toxa - 28 Мая, 2010 - 02:22:02 - перейти к сообщению
уже три часа ночи, а я все никак не могу успокоиться.
Скачал CMS mkportal. Там тупо во всех функциях всех классов, где нужна работа с БД (а это 90%) объявлена переменная $DB как global !
5. JustUserR - 28 Мая, 2010 - 14:36:25 - перейти к сообщению
Toxa Использование классов и ООП действительно полезно поскольку помогает структуризировать код и сделать требуемую инкапсуляцию - но при этом гораздо важнее соблюдать саму ООП-парадигму и к примеру не включить одни экземпляры классов в другие используя заместо них наследование и интерфейсы
Также нельзя сказать чтобы статические функции работали медленее - ведь по сути в PHP отсутствуют именные и пакетные области видимости как таковые и хороший способ создать их это расширить обращение к функции как в статическому методу класса - не зря для этой операции служит оператор :: расширения текущей области видимости - и таким образом статическая переменная или метод есть не что иное как соответствующие объект в определенной области имен А вот динамические свойства и методы уже требуют связи с определенным экземпляром класса и их выполнения в его контексте - на переключение которого требуется некоторое время
6. Toxa - 28 Мая, 2010 - 15:01:47 - перейти к сообщению
JustUserR, спасибо конечно, но все это я уже читал в книжках и не один раз.
7. JustUserR - 28 Мая, 2010 - 15:25:28 - перейти к сообщению
Toxa пишет:
JustUserR, спасибо конечно, но все это я уже читал в книжках и не один раз.
Пожалуйста! Кстати как вариант для работы с БД можете использовать встроенный в PHP класс mysql - и хранить его экземпляры в глобальном массиве и по надобности обращаться к ним из кода
8. pitbul - 28 Мая, 2010 - 16:29:31 - перейти к сообщению
Можно попробовать поюзать PDO или ADOdb. Ничего самому не надо писать , готовые классы и методы.
9. Toxa - 28 Мая, 2010 - 16:52:07 - перейти к сообщению
Видел эти классы, много лишнего там. А самому можно написать именно то, что нужно.
10. JustUserR - 28 Мая, 2010 - 16:58:37 - перейти к сообщению
pitbul пишет:
Можно попробовать поюзать PDO или ADOdb. Ничего самому не надо писать , готовые классы и методы.
А при работе на PHP под windows-сервер с базой данных типа Microsoft SQL server можно использоывть напрямую OLE-взаимодействие - благо каждый компонент от microsoft его предоставляет

 

Powered by ExBB FM 1.0 RC1