Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объектно-ориентированный PHP, какие преимущества? 
:(
    Опции темы
Bastet
Дата 19.11.2005, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 1
Всего: 6



Сразу скажу, что с принципами ООП я знакома, ценю и применяю в Delphi, немного в C++. Все преимущества знаю, понимаю. Вопрос не в этом.

Анализируя то, почему я применяю ООП в создании прикладных программ.., мммм... не могу найти смысла в объектном подходе в РНР хотя бы на примере этого самого форума.
Читала где-то, что если не требуется создание более одного объекта некоторого класса, то можно обойтись простым набором функций. Вот пример (из темы http://forum.vingrad.ru/index.php?showtopic=67535):
Код

                        $this->lib->to_by_id    = $post['author_id'];
                        $this->lib->from_member = $this->ipsclass->member;
                        $this->lib->msg_title   = '';
                        $this->lib->msg_post    = "";
                        $this->lib->force_pm    = 1; 
                        $this->lib->send_pm();

Какие преимущества дает этот класс перед простой функцией?
Код

function send_pm (to_id, subject, body, ...){
.
.
.
}

Я понимаю, что не напрасно люди применяют в программирование на РНР объектный подход. Но смысл пока ускользает...

Помогите просто увидеть преимущества...

Заранее спасибо за внимание smile
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 19.11.2005, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Цитата(Bastet @ 19.11.2005, 16:17)
Какие преимущества дает этот класс перед простой функцией?

В данном случае с данной функцией (если она одна), преимуществ я не вижу никаких..., но:
Цитата(Bastet @ 19.11.2005, 16:17)
Я понимаю, что не напрасно люди применяют в программирование на РНР объектный подход. Но смысл пока ускользает...

если брать в общем, то ООП подход, не важно в какой среде, он помогает создавать более структурированные программы, более читабельные и + экономия символов на коде smile , но это ИМХО, а также наследование... и т.д.
Это я так думаю... smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Bastet
Дата 19.11.2005, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 1
Всего: 6



-=Ustas=-, про все преимущества ООП вообще я знаю (за то и люблю). Мне интересно именно в контексте РНР.

А если бы в примере была не одна функция? Чем лучше модуля, инкапсулирующего все функции из этого класса?
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 19.11.2005, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Цитата(Bastet @ 19.11.2005, 16:36)
Мне интересно именно в контексте РНР.

Bastet, разницы нет никакой в каком языке используется этот подход, разница лишь в том, что в где то он хорошо развит, а где наоборот ущемлен (как это является в ПХП).
Цитата(Bastet @ 19.11.2005, 16:36)
А если бы в примере была не одна функция? Чем лучше модуля, инкапсулирующего все функции из этого класса?

Опять же скажу - структура, и возможно, меньшее количество переменных..., хотя...ИМХО


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Bastet
Дата 19.11.2005, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 1
Всего: 6



Разница в том, зачем использовать ООП.
Когда существует несколько объектов некоторого класса (многих разных классов), которые "живут своей жизнью" и взаимодействуют в процессе выполнения приложения - это одно.
Но РНР-код по сути не живет - он проходит N-ное количество операторов в зависимости от "входных параметров" и заканчивает свое существование, генерируя HTML-код.

Или я недопонимаю сути программирования на РНР, или просто туплю...
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 19.11.2005, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



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

http://vingrad.ru/PHP-ART-002848 - вот тут я в самом начале изложил, так сказать эти вещи.


Bastet не сравнивай ООП в Делфи и ПХП. Сам на Делфи пишу. Это совершенно разные вещи. В Делфи это полноценная теория проектирования и реализации проекта, в ПХП - способ реализации, сама понимаешь, это совершенно разные вещи.
PM ICQ   Вверх
Bastet
Дата 20.11.2005, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 1
Всего: 6



Mal Hack, короче, единственный выигрыш - более структурированный код?
Ясссно....
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 20.11.2005, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Цитата(Bastet @ 20.11.2005, 17:28)
Mal Hack, короче, единственный выигрыш - более структурированный код?

Плюс в производительности в определенных ситуациях, но это редко и не всегда на очень много.
PM ICQ   Вверх
Vaulter
Дата 28.11.2005, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



имеет смысл расмотреть еще и время разработки, доработки, и расширения PHP программы.


--------------------
PM MAIL WWW ICQ   Вверх
Neitron
Дата 30.11.2005, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: нет
Всего: 5



Почему же?
Еще можно использовать в качестве единного интерфейса для разных БД например.


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
Bastet
Дата 30.11.2005, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 26.9.2005
Где: Тильзит

Репутация: 1
Всего: 6



Neitron, поподробнее про единый интерфейс к разным БД можно?
--------------------
"I'm not bad. I'm just drawn that way" © Jessica RabbitСм.также: BB | ЖЖ | DA
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 30.11.2005, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 2
Всего: 64



Цитата(Bastet @ 30.11.2005, 19:21)
Neitron, поподробнее про единый интерфейс к разным БД можно?

Уровень абстракции от СУБД по просту говря. Хотя в общем не важно СУБД это или нет. Такую абстракцию можно сделать под любого рода сходные источники данных, но реализованные несколько различными интерфейсами. В итоге получится единый интерфейс работы, независимо от используемого источника данных, т.е. приведу примитивный псевдокод:

Код

$db = new db('oracle', 'localhost', 'login', 'pass');
$db->connect();

$db->query('SELECT bla_bla FROM bla_bla_bla');

while ($row = $db->fetch())
  echo $row['bla_bla'];

$db->disconnect();


Вот благодяря этому единому интерфейсу общения можно аналогичную операцию провести хоть с MySQL, хоть с InterBase хоть еще с чем угодно, при соблюдении стандартов SQL разумеется.
Добавлено @ 19:08
Цитата
...а где наоборот ущемлен (как это является в ПХП).
Про ООП возможности PHP 5 я бы так не сказал...


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
02077461
Дата 19.8.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 13.7.2005

Репутация: нет
Всего: 0



У меня в проекте 4 типа, ээээ,  я их абстрактно нарек "контентом".
Соответственно у меня 5 классов: абстрактный "контент", и от него наследованы 4 ребенка, для которых общие методы (такие как изменение рейтинга и манипуляция комментами) вынесены в родительский класс. Скажете мелочи? Отнюдь: на добавление/удаление комментов работает один триггер, а не 4. Внешних ключей и таблиц отношений (скажем, у каждого контента есть список жанров, много ко многим, в отдельной таблице) не 4 а одна на все. 
Манипуляции с контентом во многом одинаковы. Что бы ООП начало приносить пользу, нужно научится анализировать и абстрагироваться.
Если нужно манипулировать одним типом контента, то ООП может пригодится в качестве обертки. Простой класс-обертка с понятными именами методов, инкапсулирующих в себе логику. Вот на вскидку уже 2 преимущества.

Цитата(<Spawn> @  30.11.2005,  19:06 Найти цитируемый пост)
Вот благодяря этому единому интерфейсу общения можно аналогичную операцию провести хоть с MySQL, хоть с InterBase хоть еще с чем угодно, при соблюдении стандартов SQL 

Лично я убедился в том, что это лишнее. Трудно представить себе проект, который хотят перенести с MySQL на Oracle, например. А соблюдение стандартов SQL надоест очень скоро. В каждой СУБД имеются свои "изюминки", и в рамках стандарта далеко не все получится реализовать. Самый простой пример для этого: попробуйте используя массивы в Postgre перенести скрипты на MySQL.


PM   Вверх
Feldmarschall
Дата 19.8.2008, 16:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: -2
Всего: 32



Bastet, заметь - большинство доводов сводится к "а зато у нас песни хорошие!". Удобство разработки, повторное использование. Это все хорошо, но к сути ООП отношение имеет слабое. Самым убойным из этих аргументов является  применение ООП для эмуляции пространства имен. И такое бывало.
Про суть программ на пхп отлично сформулировано. Линейная, по сути, структура. Плюс время жизни. Можно, конечно, "наструктурировать" себе красивого кода... но, как кто-то метко сравнил в свое время, "была бы виндоус такой, как сейчас, если после каждого клика ей приходилось бы перезагружаться?"
Сюда же - наши реляционные базы. Которые, чтобы отмапить объектно, надо быть очень большим энтузиастом.

Судя по всему, действительно, написать полноценную программу на ООП в пхп занятие не слишком осмысленное. Остается использовать отдельные классы, которые хорошо вписываются в идеологию. Как написал последний оратор - классы, реализующие основные операции в пхп. Это работа с хранилищем данных, вывод. 
В большинстве же случаев ООП в пхп сводится исключительно к внешним признакам, которые ты, опять же, отлично показала в своем примере.

<Spawn>, а можешь привести не примитивный псевдокод, а реальный пример? Вопрос риторический. 

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

Это сообщение отредактировал(а) Feldmarschall - 19.8.2008, 17:16
PM   Вверх
krundetz
Дата 19.8.2008, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Для меня приемущество ООП в PHP в первую очередь удобство  и быстрота разработки, проектирования и расширения системы, но это уже больше ООА который уже в свою очередь использует ООП.

Собственно для удобства разработчика обектно-ориентированый подход и вводился в свое время. Просто человек устроен сам по себе так что мыслит именно оъектами,ю а не функциями.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1056 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.