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

Поиск:

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


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


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

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



Цитата(lukas @  24.8.2008,  13:22 Найти цитируемый пост)
мы обсуждаем не как реализованно Объектная модель в ПХП (это вообще дело разработчиков PHP)

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

Цитата(lukas @  24.8.2008,  13:22 Найти цитируемый пост)
например у меня функция A используется в Функции B объекта Obj1, я создаю унаследованный класс Obj2 от Obj1, в нем переопределяю функцию A (т.е. уже функционал другой) и мне нужно чтобы в B вызывалась уже именно переопределенная функция, а не родителя...  


Вот про это я говорил.
PM ICQ   Вверх
sTa1kEr
Дата 25.8.2008, 17:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(lukas @  22.8.2008,  19:28 Найти цитируемый пост)
Люди просто не доконца осознают мощь ООП

Интересно, а в разделах по JavaScript-у, наверное, рассказывают про "мощь" прототипного программирования, в lisp про "мощь" функционального, а в С про "мощь" процедурного? smile 

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

Приведите конкретную задачу и только тогда можно будет сказать насколько удачно можно будет применить к ней ОО подход.

Цитата(source777 @  23.8.2008,  23:49 Найти цитируемый пост)
PHP не является объектно-ориентированным

Правильнее будет сказать:
1. PHP изначально не являлся ОО языком.
2. На данный момент в PHP ООП реализован в не достаточной степени.

Цитата(source777 @  23.8.2008,  23:49 Найти цитируемый пост)
аналогично переходу от VisualBasic к VisualBasic.NET, название осталось, объектная ориентация появилась, а от языка только синтаксис остался, да и то частично

Это применимо и к PHP, только в отличии от VB это происходит в несколько этапов и  нету таких четких границ.

Цитата(lukas @  23.8.2008,  22:39 Найти цитируемый пост)
например что-то вроде свойств со своими read и write методами

Будет в PHP 5.3 http://wiki.php.net/todo/php53
Цитата

# “real” properties with attached getters and setters


Цитата(Bastet @  24.8.2008,  00:38 Найти цитируемый пост)
Вместо виртуальных методов, если я еще ничего не забыла, для реализации полиморфизма применяются абстрактные метода у базового класса. 

Вы правы. В PHP все не приватные методы по сути являются виртуальными. Т.ч. полиморфизм реализуется в полное мере.
Цитата(lukas @  24.8.2008,  13:22 Найти цитируемый пост)
например у меня функция A используется в Функции B объекта Obj1, я создаю унаследованный класс Obj2 от Obj1, в нем переопределяю функцию A (т.е. уже функционал другой) и мне нужно чтобы в B вызывалась уже именно переопределенная функция, а не родителя...  

Определяете функцию B protected и вызываться будет именно дочерняя функция.

Цитата(Mal Hack @  24.8.2008,  12:46 Найти цитируемый пост)
А вы уверены что они у вас именно живут как объекты, а не просто как синтаксически стилизованный набор функций?

Хе хе. Любые конструкции в высокоуровневых языках - это и есть по сути, как вы сказали "синтаксически стилизованный набор функций"  smile 

Цитата(Mal Hack @  24.8.2008,  12:46 Найти цитируемый пост)
В ПХП объекты, как объекты - не живут.. 

А как они "живут", как набор инструкций может быть?  smile 

Цитата(Mal Hack @  24.8.2008,  12:46 Найти цитируемый пост)
Ваша ошибка в том, что вы смотрите на ООП, как на реализацию, мол вот в Сях есть дружественные функции, а в ПХП нет и т.п. Нельзя так. ООПрограммирование - это концепция, а не реализация!!!

Тут совершенно согласен. А название темы вообще странное...

Цитата(Mal Hack @  24.8.2008,  12:46 Найти цитируемый пост)
в которой нет событийности

Тут ноги растут из типизированости в PHP (точнее ее отсутствие).
Ведь что такое событийность? Событийность это всего-лишь массив делегатов, и не более того!

Делегаты в PHP есть? Есть - это тоже самое что и строка. Ну напишите перед ней /* @var Delegate $delegate */ вот вам и делегат.
Асоциативные массивы в PHP? Можно не отвечать.
Подписка/отписка на/от события = добавление/удаление делегата в/из массив.
Вызов события = поочередный вызов делегатов массива.
Все! Вот вам и событийность и не нужны никакие __call.

А если еще учесть, что в PHP 5.3:
Цитата



То можно использовать событийность практически так же как в C#
Код

$object->someEvent += function(stdClass $object, EventArgs $args)
{
    echo 'Event fired !!!';
}

PM MAIL   Вверх
Mal Hack
Дата 25.8.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(sTa1kEr @  25.8.2008,  18:29 Найти цитируемый пост)
Хе хе. Любые конструкции в высокоуровневых языках - это и есть по сути, как вы сказали "синтаксически стилизованный набор функций"  smile 

Возьмите кнопочку... Тут уже благодаря системным вызовам и прерываниям - не просто синтаксически стиллизованный код. Но по сути, конечно, есть такая тема. Другое дело, что в ПХП это именно стилизованный синтаксис 100%.

Цитата(sTa1kEr @  25.8.2008,  18:29 Найти цитируемый пост)
А как они "живут", как набор инструкций может быть?  smile 

Объект, если рассмотреть в сущности не ПХП, а к примеру кнопочки той же, благодаря cистемным вызовам и прерываниям ведет себя как некая сущность.

Цитата(sTa1kEr @  25.8.2008,  18:29 Найти цитируемый пост)
Тут ноги растут из типизированости в PHP (точнее ее отсутствие).
Ведь что такое событийность? Событийность это всего-лишь массив делегатов, и не более того!

Типизация тут не при чем. Событийность - реакции на определенные сигналы, поступающие от туда или отсюда. Делегаты - термин по крайней мере не из С++, хотя может и из МФЦ, но я с ним не работал. И потом, Делегат - функция (если я ничего не путаю), т.е. более высокий уровень абстракции.

Цитата(sTa1kEr @  25.8.2008,  18:29 Найти цитируемый пост)
Делегаты в PHP есть? Есть - это тоже самое что и строка. Ну напишите перед ней /* @var Delegate $delegate */ вот вам и делегат.
Асоциативные массивы в PHP? Можно не отвечать.
Подписка/отписка на/от события = добавление/удаление делегата в/из массив.
Вызов события = поочередный вызов делегатов массива.

Хорошо, есть объект А и Б, с методом А1 и Б1. При срабатыавании Б1 должен автоматически вызваться А1. Б о А ничего не знает. Также, как и А о Б.

Цитата(sTa1kEr @  25.8.2008,  18:29 Найти цитируемый пост)
А если еще учесть, что в PHP 5.3:

Ничего не могу сказать на эту тему, не смотрел еще этих вещей...
PM ICQ   Вверх
lukas
Дата 25.8.2008, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(sTa1kEr @  25.8.2008,  17:29 Найти цитируемый пост)
Определяете функцию B protected и вызываться будет именно дочерняя функция.


Круто, не знал...  smile 

Ага, всего что не хватает щас в PHP5.X будет в PHP5.3

Это сообщение отредактировал(а) lukas - 25.8.2008, 21:25


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
sTa1kEr
Дата 25.8.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(Mal Hack @  25.8.2008,  21:23 Найти цитируемый пост)
Возьмите кнопочку... Тут уже благодаря системным вызовам и прерываниям - не просто синтаксически стиллизованный код. Но по сути, конечно, есть такая тема. Другое дело, что в ПХП это именно стилизованный синтаксис 100%.

По поводу кнопочек, специфика HTTP протокола такая, что события типа onClick в server-side скрипте просто не уместны в данном контексте, т.к. они происходят на стороне клиента.
Возьмем, к примеру, ASP.NET. В C# ведь используется событийность? Однако что происходит при создании события onClick на кнопку? - Генерируется куча джаваскрипта и куча кода в на C# - вот тебе и вся событийность... по сути всего-лишь фитча IDE. Так чем же PHP в этом плане хуже? 

Цитата(Mal Hack @  25.8.2008,  21:23 Найти цитируемый пост)
Объект, если рассмотреть в сущности не ПХП, а к примеру кнопочки той же, благодаря системным вызовам и прерываниям ведет себя как некая сущность.

Т.е. по твоему, если объект абстрагирован от системных вызовов - то это уже в понимании ООП и не объект вовсе? В таком случае C# так же не ОО язык, т.к. тоже не работает непосредственно с системными вызовами.

Цитата(Mal Hack @  25.8.2008,  21:23 Найти цитируемый пост)
Типизация тут не при чем.

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

Цитата(Mal Hack @  25.8.2008,  21:23 Найти цитируемый пост)
Событийность - реакции на определенные сигналы

А что такое реакция на сигнал? Это вызов определенной функции при изменении состояния некоторого объекта. 

Цитата(Mal Hack @  25.8.2008,  21:23 Найти цитируемый пост)
Делегат - функция (если я ничего не путаю)

Почти. Делегат - это указатель на функцию. Насколько я понимаю, в C++ это так и называется?

Цитата(Mal Hack @  25.8.2008,  21:23 Найти цитируемый пост)
Хорошо, есть объект А и Б, с методом А1 и Б1. При срабатыавании Б1 должен автоматически вызваться А1. Б о А ничего не знает. Также, как и А о Б.

Как это не знает? А сначала должен подписать на событие А1, прежде чем Б сможет его автоматически вызвать. Т.е. по сути передать А должен передать делегат функции A1 объекту Б. Тогда при срабатывании Б1 просто будут вызваны все делегаты которые ранее были переданы объекту.


PM MAIL   Вверх
Mal Hack
Дата 25.8.2008, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



sTa1kEr, давай сиходить из того, событийность должна реализовываться не программистом, а языком.  
В ПХП этого нет. Вот я о чем. Реализовать событийность самому - можно, а вот сделать что-то вроде:
connect(A, A1(), B, B1()) - нельзя. На счет 5.3 я не говорю - не знаю. Т.е. объекты А и Б не знают о сущестовании друг друга, об этом знает программа, которая связывает сигнал со слотом.

Цитата(sTa1kEr @  25.8.2008,  23:20 Найти цитируемый пост)
Отсутствие типизации виновато в том, что складывается впечатление о не возможности использования событий в PHP.

Типизация и событийность - совершенно разные вещи, они тут не при чем (в совокупности).

Цитата(sTa1kEr @  25.8.2008,  23:20 Найти цитируемый пост)
По поводу кнопочек, специфика HTTP протокола такая, что события типа onClick в server-side скрипте просто не уместны в данном контексте, т.к. они происходят на стороне клиента.

Так вот и покажите мне в ПХП - объект, который будет себя вести КАК кнопочка. Т.е. его событийность будет реализована средствами ПХП, а не программиста (реализация самих событий - конечно за программистом).

Цитата(sTa1kEr @  25.8.2008,  23:20 Найти цитируемый пост)
Т.е. по твоему, если объект абстрагирован от системных вызовов - то это уже в понимании ООП и не объект вовсе? В таком случае C# так же не ОО язык, т.к. тоже не работает непосредственно с системными вызовами.

Я несколько не корректно выразился. В данном случае я имел ввиду то, что событийность на уровне языка реализуется, а не самим программистом. Он только связывает события.
PM ICQ   Вверх
sTa1kEr
Дата 25.8.2008, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(Mal Hack @  25.8.2008,  23:34 Найти цитируемый пост)
Так вот и покажите мне в ПХП - объект, который будет себя вести КАК кнопочка.

Такого объекта нет ни в PHP, ни в одном другом server-side языке, т.к. такое не возможно. В качестве наглядного примера я выше привел ASP.NET - там все тоже самое, с одной разницей, реализацией события занимается не программист, а IDE. В принципе Zend может сделать тоже самое и для PHP.

Цитата(Mal Hack @  25.8.2008,  23:34 Найти цитируемый пост)
sTa1kEr, давай сиходить из того, событийность должна реализовываться не программистом, а языком.  

Хорошо, в таком случае весь вопрос в том, что в PHP нет такой конструкции event (по сути просто пары встроенных классов)? Да этого в PHP нет и хоть это не сложно реализовать в PHP, скорее всего этого не будет до тех пор, пока в этом нет надобности (а особой надобности в этом, имхо, не будет пока нет полноценной многопоточности). Однако это не мешает использовать событийность и ОО подход.
PM MAIL   Вверх
Mal Hack
Дата 25.8.2008, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(sTa1kEr @  26.8.2008,  00:12 Найти цитируемый пост)
Такого объекта нет ни в PHP, ни в одном другом server-side языке, т.к. такое не возможно. В качестве наглядного примера я выше привел ASP.NET - там все тоже самое, с одной разницей, реализацией события занимается не программист, а IDE. В принципе Zend может сделать тоже самое и для PHP.

Ну дык и я про тоже. Такова специфика ПХП...
Среда это среда. А я говорю, ну как бы про транслятор чтоли, в совокупностью с системой. Сейчас могу не корректно выражать мысли, ибо голова забита несколько другими вопросами.

Цитата(sTa1kEr @  26.8.2008,  00:12 Найти цитируемый пост)
Хорошо, в таком случае весь вопрос в том, что в PHP нет такой конструкции event (по сути просто пары встроенных классов)?

Ну как бы грубо говоря да. Грубо говоря, потому, что event лишь один из вариантов реализации связи, а я про механизм, но думаю мы друг друга поняли.

Цитата(sTa1kEr @  26.8.2008,  00:12 Найти цитируемый пост)
Да этого в PHP нет и хоть это не сложно реализовать в PHP, скорее всего этого не будет до тех пор, пока в этом нет надобности

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

Цитата(sTa1kEr @  26.8.2008,  00:12 Найти цитируемый пост)
 (а особой надобности в этом, имхо, не будет пока нет полноценной многопоточности)

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

Многопоточность тут тоже не при чем. В ПХП это не так актуально, а если надо, есть средства ее реализовать руками. А сигнал/слот может и в одном потоке работать.

Цитата(sTa1kEr @  26.8.2008,  00:12 Найти цитируемый пост)
Однако это не мешает использовать событийность и ОО подход. 

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

Это сообщение отредактировал(а) Mal Hack - 25.8.2008, 23:34
PM ICQ   Вверх
sTa1kEr
Дата 25.8.2008, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(Mal Hack @  26.8.2008,  00:26 Найти цитируемый пост)
В языке этого нет. Реализовать может только сам программист. Вот в чем суть, я как раз-таки имею ввиду то, что именно в языке этого механизма нет.

Я имел ввиду не сложно реализовать в самом языке этот механизм. И разработчики PHP вполне могли бы это сделать и в PHP 5.3, и тем более в PHP 6, но не делают, как я думаю, по описанным мной выше причинам. 

Цитата(Mal Hack @  26.8.2008,  00:26 Найти цитируемый пост)
Такова специфика ПХП...

Это специфика не PHP, а HTTP протокола.

Цитата(Mal Hack @  26.8.2008,  00:26 Найти цитируемый пост)
Многопоточность тут тоже не при чем.

Еще как причем. Если в крации, то реализовать ОО модель в PHP на уровне .NET-а мешают, на мой взгляд, именно эти две вещи: многопоточность, не строгая типизация.

Mal Hack, PHP это высокоуровневый язык, ты же рассуждаешь с позиции низкоуровнего C++.
PM MAIL   Вверх
Mal Hack
Дата 26.8.2008, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(sTa1kEr @  26.8.2008,  00:52 Найти цитируемый пост)
Я имел ввиду не сложно реализовать в самом языке этот механизм. И разработчики PHP вполне могли бы это сделать и в PHP 5.3, и тем более в PHP 6, но не делают, как я думаю, по описанным мной выше причинам. 

По каким причинам? наверное я пропустил просто...
ты не подумай, что я придираюсь, просто реально я их либо в упор не вижу, приведи еще разок

Цитата(sTa1kEr @  26.8.2008,  00:52 Найти цитируемый пост)
Это специфика не PHP, а HTTP протокола.

Давай так. Отбросим кнопочки. Мы про событийность внутри самого ПХП, т.е. в скрипте. Тут HTTPне при чем. Тут специфика структурного, интерпретируемого языка программирования, как Perl, например.

Цитата(sTa1kEr @  26.8.2008,  00:52 Найти цитируемый пост)
Еще как причем. Если в крации, то реализовать ОО модель в PHP на уровне .NET-а мешают, на мой взгляд, именно эти две вещи: многопоточность, не строгая типизация.

Пример однопоточного выполнения (чисто на пальцах, суть, которую хочу показать). 
Код

connect(A, signal(), B, slot())
....
A::somefnc()
{
    emit signal();
}

B::slot()
{
 //  dosomething
}

Зачем тут многопоточность? есть сигнал - выполнилась функция, по другому:
Код

A::somefnc()
{
    B::slot();
}

B::slot()
{
 //  dosomething
}

Да, для Визуалки испольузется многопоточность, но по сути, сам механизм сигнал/слот не обязательно должен быть в другом потоке.

Цитата(sTa1kEr @  26.8.2008,  00:52 Найти цитируемый пост)
не строгая типизация.

А при чем тут типизация? То, что это минус ПХП и т.д. - отложим, не в этом суть темы, чем  она мешает событийности? Скажем так, да жесткая типизация позволилабы прописывать объекты и т.п. в этом ты имеешь ввиду?

Цитата(sTa1kEr @  26.8.2008,  00:52 Найти цитируемый пост)
Mal Hack, PHP это высокоуровневый язык, ты же рассуждаешь с позиции низкоуровнего C++. 

Ну что такое низкий и высокий уровень я бы еще поспорил. Это условность всетаки. И потом, В C++ той событийности, о которой я говорю нет, ее дает Qt, например. Это уже более высокий уровень, все-таки.
PM ICQ   Вверх
sTa1kEr
Дата 26.8.2008, 14:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(Mal Hack @  26.8.2008,  01:04 Найти цитируемый пост)
По каким причинам? наверное я пропустил просто...

По тем причинам, что в этом практически нет потребности. Для кнопок этого не сделать, а отсутствие многопоточности не позволит создать сколько-нибудь приемлемое серверное приложение. Остаются только простейшие события вроде onRowDeleted, onPageRender итд - это просто реализуется и как-то не в стиле PHP что-ли... В общем не стоит овчинка выделки на данные момент, то что вместо /* @var event */ можно будет написать просто event, кроме большей наглядности ничего не даст. Разве что "для галочки" реализовать.

Цитата(Mal Hack @  26.8.2008,  01:04 Найти цитируемый пост)
Зачем тут многопоточность?

Давай по порядку. Естественно здесь она не нужна, она не причина, она один из факторов не дающих PHP создать, так сказать, благоприятную почву для создания событийности на уроне языка. Или другими словами отсутствие таких вещей как многопоточность и строгая типизация сильно сдерживает развитие PHP в нужном, так сказать, ОО направлении.

Наглядный пример http://php.net/socket-select - вот как приходится извращатся, что бы избежать fork-ов! И это еще цветочки! Естественно, про реализацию event patern-а я вообще молчу... 

Строгая типизация естественно тоже сама по себе ни причем. Но она во первых - так же сковывает развитие PHP (тут можно долго перечислять проблемы из-за отсутствия типизации, но это уже к оффтоп). Во вторых - она (точнее ее отсутствие) вводит в заблуждение, раз в PHP нету типа Delegete - значит в PHP нету делегатов, анонимных делегатов... раз нету ключевого слова event, значит нельзя использовать событийность, и все в таком духе. Хотя на самом деле все это есть, пусть и называется строкой... Будь строгая типизация - ничего бы такого не было.
Кстати, еще пример - SplTypes. Eще больше двух лет назад был уже реализован тип Enum (это из C#) + реализованы попытки совместить строгую и не строгую типизацию... И ведь даже работает, только вот не нужно никому.

Цитата(Mal Hack @  26.8.2008,  01:04 Найти цитируемый пост)
Пример однопоточного выполнения (чисто на пальцах, суть, которую хочу показать). 

Цитата(Mal Hack @  26.8.2008,  01:04 Найти цитируемый пост)
connect(A, signal(), B, slot())

Я не знаю что это за функция, но насколько я предполагаю это и есть подписка на событие? И в чем проблема тоже самое сделать в PHP?
Опять же пример из C#, взять подписку на событие и пройтись рефлектором. И что мы увидим? Да всеголишь вызов метода add_Listener() у обычного, ничем не отличающегося от других класса Event ! Т.е. по сути событие это класс в из 3 методов (addListener, removeListener и fire) и одного свойства - коллекции делегатов (читай массив указателей на функции). 

Твой пример портированный на C#
Код

public delegate void SomeEventHandler(object sender, EventArgs e);

public class Program
{
    public static void Main()
    {
        A.signal += new SomeEventHandler(B.slot); // аналог твоей функции коннект
    }
}

public class A
{
    public static event SomeEventHandler signal;

    public static void somefnc() // твоя функция A::somefnc()
    {
        signal(); // если я правильно понял, то тоже саоме что: emit signal();
    }
}

public class B
{
    public static void slot() // твоя функция B::slot()
    {
        //  dosomething
    }
}


А вот как бы это могло выглядеть в PHP
Код


A::$signal[] = 'B::somefunc'; // вместо функции connect

class A
{
    public static event $signal; 

    public static function somefnc()
    {
        $this->signal();
    }
}

class B
{
    public static function slot()
    {
        //  dosomething
    }
}


А вот как это уже сейчас можно использовать
Код


A::$signal = new Event(); // Можно в конструкторе
A::$signal[] = 'B::somefunc'; // Да да, благодаря интерфейсу ArrayAccess, это возможно уже сейчас, не смотря на то что Event - это обычный класс

class A
{
    public static $signal; // если бы не был статический, то в конструкторе $this->signal = new Event(); 

    public static function somefnc()
    {
        $this->signal->fire(); // в PHP 5.3 уже можно будет реализовать просто $this->signal();
    }
}

class B
{
    public static function slot()
    {
        //  dosomething
    }
}


Найди 3 отличия  smile 

Это сообщение отредактировал(а) sTa1kEr - 26.8.2008, 14:46
PM MAIL   Вверх
lukas
Дата 26.8.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Люди да причем тут события, это вообще задумка для ОС приложений, где без событийной модели не обойтись, вот ее и встроили...


Mal Hack, ты думаешь во всех языках под ОС релизовано событийность, да событийность часто реализуется только за счет IDE, и за частую события это обычные свойства с read и write (которые принимают в качестве результата ссылку на функцию)... Далее же где вызывать то или иное событие определяется часто программистом...

События довольно легко реализовать через callback функции, и они не имеют никакого отношения к ООП. 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
krundetz
Дата 26.8.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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

Ище раз повторю свою позицию ООП это прежде всего способ облегчить жизнь программиста, и в первую очередь при проектирование, а уже грамотоно спроиктированая система облегчит труд при ее реализации.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Mal Hack
Дата 26.8.2008, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(sTa1kEr @  26.8.2008,  15:40 Найти цитируемый пост)
Естественно здесь она не нужна, она не причина, она один из факторов не дающих PHP создать, так сказать, благоприятную почву для создания событийности на уроне языка. 

Согласен.

Цитата(sTa1kEr @  26.8.2008,  15:40 Найти цитируемый пост)
Строгая типизация естественно тоже сама по себе ни причем. Но она во первых - так же сковывает развитие PHP (тут можно долго перечислять проблемы из-за отсутствия типизации, но это уже к оффтоп).

Согласен, в какой-то степени, но в концепте тоже.

Цитата(sTa1kEr @  26.8.2008,  15:40 Найти цитируемый пост)
Во вторых - она (точнее ее отсутствие) вводит в заблуждение, раз в PHP нету типа Delegete - значит в PHP нету делегатов, анонимных делегатов... раз нету ключевого слова event, значит нельзя использовать событийность, и все в таком духе. Хотя на самом деле все это есть, пусть и называется строкой... Будь строгая типизация - ничего бы такого не было.

Ну, в принципе да.

Цитата(sTa1kEr @  26.8.2008,  15:40 Найти цитируемый пост)
А вот как это уже сейчас можно использовать

Да, но, согласись, это криво, по сути это callback, не очень удобный.
В принципе да, это механизм, несколько не тот, который я считаю оптимальным, но реальный, работающий механизм.
С какого момента это стало возможно?
Плюс в репу.

Цитата(lukas @  26.8.2008,  20:36 Найти цитируемый пост)
События довольно легко реализовать через callback функции, и они не имеют никакого отношения к ООП.  

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

Цитата(krundetz @  26.8.2008,  23:14 Найти цитируемый пост)
sTa1kEr, Mal Hack, чет вы в реализацию помоему ударились как в свое время говорил мой научник реализовывать будете потом вы концепцию концепцию поймите.

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

Цитата(krundetz @  26.8.2008,  23:14 Найти цитируемый пост)
Ище раз повторю свою позицию ООП это прежде всего способ облегчить жизнь программиста, и в первую очередь при проектирование, а уже грамотоно спроиктированая система облегчит труд при ее реализации. 

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


Опытный
**


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

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



Цитата(Mal Hack @  26.8.2008,  23:25 Найти цитируемый пост)
Объект должен обладать событийностью, механизм которой реализован в самом языке, и его не надо делать программисту


ну если нет в ПХП событийности, что отказываться от использования классов???

P.S. На дрюпале если я не ошибаюсь (я не знаток дрюпала) событийностью называются хуки, которые скорее всего реализованы через колбек функции...

Это сообщение отредактировал(а) lukas - 27.8.2008, 07:34


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Страницы: (7) Все « Первая ... 3 4 [5] 6 7 
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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