Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Объектно-ориентированая модель.
 
 автор: Равечка   (21.06.2007 в 17:42)   письмо автору
 
 

Достаточно хорошо понимаю ООП, и все же. Все врмя при разработке порталов, сайтов и т.д. возникает вопрос - для чего это нужно в ПХП?
Навенро я плохой проектировщик, но увидеть структуру в обычном сайте для меня очень сложно, хотя в случае си++ у меня это получается хорошо.

И все же вопрос. может ли кто нибудь, привести конкретный пример своей (чужой) разработки, где используется объектная модель написания сайта?

з.ы. в своей практике использую функциональную модель, т.е. файлы псевдо-библиотеки, в которые помещаю нужный мне функционал.

з.з.ы Если кто нибудь отклинется и все таки попытается объяснить мне объектый принцип постаения сайтов, то во-первых БОЛЬШОЕ спасибо, во вторых - хотелось бы с живыми примерами, в которых объекная модель будет оправдана. (по мне так только код раздувает и гимморой наживаешь)

   
 
 автор: bronenos   (21.06.2007 в 17:48)   письмо автору
 
   для: Равечка   (21.06.2007 в 17:42)
 

IPB =)
принципы схожие - упрощение работы с БД, файлами, сессиями и т.д

   
 
 автор: Равечка   (21.06.2007 в 18:02)   письмо автору
 
   для: bronenos   (21.06.2007 в 17:48)
 

Я в кратце ( очень вкратце) посмотрел классы в ИБП. не нашел для себя обоснования этой идеи.

к Примеру класс class.bbcode.php я изменил в функцию bbcode(str); которую узпешно использую у себя в проектах.

Замечу что кода при этому получается меньше.

   
 
 автор: bronenos   (21.06.2007 в 18:05)   письмо автору
 
   для: Равечка   (21.06.2007 в 18:02)
 

я знаю, они помешаны на ооп... но реально есть 2 полезных - с файлами и с бд работать

   
 
 автор: TXC   (21.06.2007 в 22:44)   письмо автору
 
   для: bronenos   (21.06.2007 в 18:05)
 

На сколько хватает моей практики, то прихожу тоже в факту, о котором говорят практически все авторы книг по PHP. Именно то, что ООП в PHP реализовано слабо. Даже в случае с классом для БД не всегда это оправдано. Если нужно уменьшать скорость и нагрузку, то лучше обойтись функциями или вообще встроенными функциями PHP (пример тому - библиотека MySQLi).
ИМХО, ООП может быть оправдано только в случае мультиязычности, поддержки различных БД, ну и для простоты дальнейшей разработки продукта. И то не всегда.

   
 
 автор: cheops   (22.06.2007 в 12:40)   письмо автору
 
   для: TXC   (21.06.2007 в 22:44)
 

Слабо, но интерфейс к СУБД тут вообще не причём. Не к объектно-ориентированной СУБД следует обращаться с использованием интерфейса, знакомого миллионам разработчиков, а не писать свой собственный никому не известный. А уже если приспичило использовать объектно-ориентированный интерфейс, то лучше, действительно, использовать библиотеку mysqli - она хотя бы стандартная.

ООП полезен для построения иерархий, когда у вас имеется масса сущностей, которые в общем одинаковы, но отличаются лишь деталями - это позволяет в рамках проекта сократить код. Т.е. грубо говоря вместо 2 000 000 в конце концов вы напишет 1 300 000. Для 30-строчной гостевой книги ООП-вариант займёт 150 строк и будет на порядок менее читабельный. А самое паршивое - разработанный класс больше вообще никогда не будет использоваться. ООП работает и приносит выгоду только когда разработанные классы начинают использовать (композиция, наследование) другие классы. Если такой иерархии нет - использование ООП - это потеря времени, денег, сил, а зачастую и выпендривание.

PS ООП в PHP слаб своей глюкавостью (потихоньку исправляется, но можно и побыстрее) и полным отсуствием паттернов - паттерны из других языков не работают, да в PHP зачастую и проблем других языков нет, а имеются свои, которые в других языках не возникают. ООП - это не панацея - использование ООП не приводит автоматически к успешному проекту - закопаться там можно очень здорово. ООП - это минное поле, идти по которому желательно с картой (паттернами) - в других языках они наработаны, а в PHP нет.

   
 
 автор: TXC   (22.06.2007 в 19:31)   письмо автору
 
   для: cheops   (22.06.2007 в 12:40)
 

Благодарю за то что расставили точки над 'і'. Я вот уже сколько бьюсь над вопросом паттернов, когда читаю литературу по кодированию, а оказывается, что в PHP это пока не реализовано. =)

   
 
 автор: cheops   (22.06.2007 в 23:31)   письмо автору
 
   для: TXC   (22.06.2007 в 19:31)
 

Если расставлять точки на i, то имеется пару паттернов, которые работают и в PHP - они инвариантны для объектно-ориентированного программирования (не зависят от языка), но паттерны - это не самодостаточные сущности - это элемент мозаики, культуры - ООП в PHP не существует и трёх лет, да и сам язык очень молод (как физически, так и возрастом разработчиков) - не сложилось ещё нормальной культуры использования ООП - шишки сейчас набиваются, всякие phpBB, Britics и т.п. это лишь предтеча классических объектно-ориентированных приложений на PHP.

   
 
 автор: TXC   (23.06.2007 в 15:10)   письмо автору
 
   для: cheops   (22.06.2007 в 23:31)
 

Если можно, расскажите подробнее об инвариантных паттернах. Или дайте пожалуйста ссылку, где можно про это почитать.


Ну и еще такой вопрос. Ядро любой системы (в даном случае я пишу фреймворк) необходимо собирать из функций, накопленный в процессе написания приложения. А при выделении сущностей создавать классы. Верно я понимаю?

   
 
 автор: cheops   (24.06.2007 в 12:02)   письмо автору
 
   для: TXC   (23.06.2007 в 15:10)
 

Существуют паттерны, которые не зависят от языка и работают в любой объектно-ориентированной среде (фабрика, одиночка, фасад и т.п.), а ряд паттернов могут быть завязаны на конкретные особенности языка, например, если используются для построения паттерна указатели C++ нигде больше такой паттерн воспроизвести не удастся.

   
 
 автор: Илья Кравцов   (23.06.2007 в 18:54)   письмо автору
 
   для: TXC   (22.06.2007 в 19:31)
 

Вот нашел сайт про паттерны в пхп www.patternsforphp.com

   
 
 автор: TXC   (23.06.2007 в 20:11)   письмо автору
 
   для: Илья Кравцов   (23.06.2007 в 18:54)
 

Большое спасибо, это как раз то, что нужно.

   
 
 автор: cheops   (22.06.2007 в 12:29)   письмо автору
 
   для: Равечка   (21.06.2007 в 18:02)
 

И совершенно верно - классы должны моделировать объекты реального мира, которых нет и быть не может в синтаксисе языка - они не должны моделировать компьютерные сущности (только в крайнем случае) - для этого имеются отточеные десятилетиями интерфейсы.

ООП позволяет написать свой свобственный язык в рамках предметной области (для которой специализированных языков не припасли), переписывать компьютерные языки - это непозволительная роскошь.

   
 
 автор: t4f   (21.06.2007 в 23:52)   письмо автору
 
   для: Равечка   (21.06.2007 в 17:42)
 

(по мне так только код раздувает и гимморой наживаешь)
Да ты что? Представь такую ситуацию: есть около двухсот файлов, которые взаимодействуют с базой данных. Т.е. в каждом файле тупо скопирован из мануала код подключения, выполнения запроса и обработки результата. В некоторых файлах даже в нескольких местах применяется mysql_fetch_array. Разве это не раздутый код? Теперь стало необходимо поменять муську на бд от майкрософт. Придется изменять все файлы мне.

В принципе, можно было же написать псевдо-библиотеки, но этого не сделали. И такие примеры встречаются на каждом шагу, в каждой организации.

   
 
 автор: Ralph   (22.06.2007 в 08:46)   письмо автору
 
   для: t4f   (21.06.2007 в 23:52)
 

скажу сразу честно,что в ООП практически полный ноль...Но с моей точки зрения,если "в каждом файле ТУПО СКОПИРОВАН ИЗ МАНУАЛА код подключения и т.д",то по моему это показатель не преимущества ООП,а компетенции программиста.Такой программист так же ТУПО будет использовать класс для "сложнейшего преобразования"-замены в тексте слова Hello на слово Привет...

   
 
 автор: Ralph   (22.06.2007 в 08:53)   письмо автору
 
   для: Ralph   (22.06.2007 в 08:46)
 

Автор темы просил конкретные примеры...Одному моему случайному знакомому понадобился сайт.Склепали действительно быстро,за 4 дня.Но он пожаловался на сильные тормоза на вроде простой ситуации-постраничная навигация по списку фильмов и попросил меня посмотреть код на предмет ускорения

   
 
 автор: Ralph   (22.06.2007 в 09:01)   письмо автору
 
   для: Ralph   (22.06.2007 в 08:53)
 

Глянул код и понял,что лекцию о классах разработчики добросовестно выучили,а вот лекцию о функциях попросту прогуляли с пивком в сквере-засилие классов при практически полном отсутствии функций...Сквозь дебри с трудом добрался до пресловутого запроса... SELECT * FROM film WHERE LEFT(name,1)>'a' AND LEFT(name,1)<'d' ORDER BY ASC

   
 
 автор: Ralph   (22.06.2007 в 09:05)   письмо автору
 
   для: Ralph   (22.06.2007 в 09:01)
 

При наличии в базе 800 фильмов и выводе на экран около 100 время генерации страницы колебалось от 2 до 6 секунд...Вопрос:а что будет при наличии 3000 фильмов и,не дай бог,ЧУТЬ более сложного запроса ???...

   
 
 автор: bronenos   (22.06.2007 в 10:09)   письмо автору
 
   для: Ralph   (22.06.2007 в 09:05)
 

я базовые функции особо не знаю, но LEFT (a, b) берет, как понимаю, первые b букв из столбца a? и.. есть аналог - RIGHT?

   
 
 автор: cheops   (22.06.2007 в 12:22)   письмо автору
 
   для: Равечка   (21.06.2007 в 17:42)
 

Ответу на данный вопрос посвящена наша новая книга "Объектно-ориентированное программирование в PHP", которая отправлена на корректуру. К сожалению, дата её выхода пока не известна.

В настоящий момент мы используем набор классов и объектно-ориентированную CMS для построения всех новых сайтов (и набор классов и CMS можно будет найти на компакт-диске поставляемом вместе с книгой). Главное достоинство - это более высокий процент повторного использования кода, чем мы могли добиться раньше при использовании процедурного подхода. И более удобная расширяемость системы.

Конечно, чтобы это начало работать в Web-среде, следует один раз (реально, конечно, переписывать пару-тройку раз придётся) потратить время на разработку системы (и времени уйдёт больше, чем на разработку трёх сайтов) - затем её переписывать больше никогда не придётся - будете лишь вносить косметические изменения и выращивать новые ветки на вашем объектно-ориентированном дереве.

PS Недастатков использования ООП в Web-среде до чёрта, обсуждалось много раз - никакой инфраструктуры - старые протоколы, реляционные базы, отсуствие сессионности и т.д. и т.п. Однако пользу из ООП тоже можно выжать.
PPS ООП - это способ управления гиганскими проектами, с которыми не справляется процедурный подход, показать как это работает в одном посте невозможно, нам на это потребовалось (вместе с описанием синтаксиса и предопределённых классов PHP) 600 страниц.

   
 
 автор: Равечка   (22.06.2007 в 17:59)   письмо автору
 
   для: cheops   (22.06.2007 в 12:22)
 

Буду ждать книгу с нетерпением, наверняка подцеплю для себя полезные знания.

   
 
 автор: CrazyAngel   (22.06.2007 в 13:18)   письмо автору
 
   для: Равечка   (21.06.2007 в 17:42)
 

битрикс

   
 
 автор: lgar   (23.06.2007 в 20:29)   письмо автору
 
   для: Равечка   (21.06.2007 в 17:42)
 

Я не понимаю трех вещей:1)почему все зарубежные веб-приложения написаны с использованием ооп и они её боготворят,хотя это влият на призводительность,и код более понятным во всяком случае для меня не становится.2)Где вообще можно использовать ооп в веб.3)пришло ли время использовать ооп в пхп,если он ещё такой сырой?
PS Можно поподобнее о книжке.Хотя бы содержание.Скоро выйдет?Я надеюсь в мягком переплёте,не люблю книжки бхв в твердом переплете,они и дороже и больше шансов,что порвутся и т д

   
 
 автор: cheops   (24.06.2007 в 11:59)   письмо автору
 
   для: lgar   (23.06.2007 в 20:29)
 

1) Очень сильное влияние Java, у нас больше Perl и C влияет на Web.
2) При создании иерархий, например, иерархии объектов элементов управления HTML-форм, которые бы автоматически проверялись на корректное заполнение классом формы. Причём можно не ограничиваться классическими элементами управления, а вводить свои собственные.
3) Использовать ООП можно (не бездумно конечно и к месту и не месту), здесь ограничением скорее служит распространение PHP 5, который в последнее время достаточно широко распространился. При корректном использовании можно добиться впечатляющих результатов по повторному использованию кода.

PS Книга сейчас на корректуре, когда она закончится прогнозировать сложно, так как сейчас сезон отпусков. Краткое содержание её следующее
Введение
1 Введение в объектно-ориентированное программирование
2 Классы и объекты
3 Специальные методы классов
4 Инкапсуляция, наследование и полиморфизм
5 Интерфейсы
6 Статически и константные члены и методы класса
7 Клонирование и серилизация объектов
8 Исключения
9 Отражения
10 Framework
11 Создание системы управления сайтом
Приложение 1 Предопределённые объекты PHP
Приложение 2 Список функций для работы с классами и объектами

   
 
 автор: Osipov   (24.06.2007 в 13:42)   письмо автору
 
   для: Равечка   (21.06.2007 в 17:42)
 

Я, например, очень часто использую ООП на PHP, причём такие паттерны, как абстрактная фабрика и комманда использую вообще постоянно.

Вот пример: мы можем создать класс "пользователь", тогда очень просто напечатать ссылку на него $user->print_link(); , и очень легко будет изменить её вид -- сразу во всех местах, кроме того, всю информацию о залогиненном пользователе можно хранить в одной переменной.

Я для всех данных, которые храняться в таблице mysql использую один класс, от которого порождаю по классу для каждой таблицы. Это позволяет удобно создавать, модифицировать таблицу, и с помощью одной строчки получить пользователя, например, $factory["user"]->get(1) --- при этом автоматически выбирается строка таблицы с индексом 1 и такие типы, как DATETIME и т. п. автоматически переводяться в естесственное PHP представление, и т. п.

Ещё я считаю, что разработка сильно упроститься, если сделать единый скрипт, например, do.php для обработки действий пользователя. В нем --- абстрактный класс action с абстрактной функцией do, от него подклассы для каждого действия, например class signup_action extends action для регистрации. Затем сделать массив $all_actions["signup"]=new signup_action; и обработчик для запросов типа do.php?action=signup. Тогда у action ещё можно сделать функцию, которая проверяет, достаточно ли у пользователя прав на совершение данного действия, причём, определить её в самом классе action так, чтобы она просто проверяла уровень данного пользователя (незарегистрированный пользователь, зарегистрированный пользователь, администратор,...) и сравнивала с уровнем, необходимым для данного действия. В более сложных ситуациях, эту функцию можно переопределить, например, если мы разрабатываем форум, то пользователь может редактировать только свои сообщения. И эта система действий позволила мне создать код защиты от ботов на каждой форме (сайт раньше флудили), сохранение черновиков во всех формах и т. п. --- всё универсально и очень удобно.

Также полезно аналогичным образом создать скрипт show.php который предназначен для просмотра. Каждый вид (то есть отдельная страница сайта) --- это тоже наследник от базового класса для всех видов. Вызов происходит, например, так: show.php?view=forum&id=15 (кстати, форум тогда это тоже класс, объект которого можно получить как $factory["forum"]->get(15), и тогда, если, например, у форума есть родительский форум, то он автоматически инициализируется в соответствующую переменную этого объекта). Тогда очень просто, например, добавить на всех страницах сайта меню, или банер --- достаточно изменить только один класс. Тогда ещё можно комбинировать виды, например сделать класс window_view, который показывает какую-то страницу сайта в импровизированном окне и тогда, например, можно написать: $view["widowed_forum"]=new window_view(new forum_view);

ООП всегда только упрощает разработку, особенно, если не скупиться на него.

   
 
 автор: Равечка   (25.06.2007 в 23:16)   письмо автору
 
   для: Osipov   (24.06.2007 в 13:42)
 

Можно посмотреть исходники?

ravenzone@mail.ru

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования