Привет! Кто - нибудь заморачивался такой темой? Я ищу фреймворк желательно на 5.3, чтобы я мог обработчики в виде замыканий назначать, как в c#. Типа PHP: <?php $target.someEvent.AddHandler{ bla-bla-bla hvatai bolshe kidai dalshe } Спасибо!
А объясните зачем. Я сколько не пытался, не нашёл событийному программированию сколько-нибудь обширного применения в php-сценариях.
vasa_c а чем ПХП-сценарии отличаются от, например, c# кода? Я раньше когда надо было расширить класс, наследовал его и работал с новым классом. Потом некоторое время поработал ан c# и мне понравилось как тоже самое можно сделать проще через события. Хочу так же теперь на пхп делать. Тем более замыкания в 5.3 появились.
alexey_baranov Тем что на С# пишутся, например оконные приложения, где действия пользователя могут вызывать события. У PHP в контексте сайтостроения этого нет. На С# могут быть написаны "долгоиграющие" программы, которые могут менять свое состояние и, соответственно, выбрасывать события. PHP это обычно "взлетел и умер", здесь события просто не успевают возникнуть. vasa_c Если писать систему автоматизации, например, то можно строить/хранить модель системы. Тогда: поставщик изменил цену, оператор вносит это изменение, в системы возникает событие priceChanged. Коряво, но нечто интересное в этом есть.
Volt(220) Да, этим всем отличается. И это все не мешает использовать события. Я имел в виду чем отличаются Что есть такого в с# и нет в пхп, что мешает использовать события в ПХП? События нужны в консольных приложениях не меньше, чем в оконных. Это не вопрос пользовательского интерфейса. И в коротких не меньше. чем в длинных. Примеров дохера, что за глупый вопрос? Как буд-то пхп - это какой-то особый язык, где запрещено писать события. Откройте доктрину и увидете кучу событий. Доктрина же на ПХП написана. Любой код можно писать на событиях. Это просто вопрос стиля. Лично у меня через пол года на c# кукушку сдвинуло. Раньше если мне надо было определить некое поведение того, что пользователь закрывает некую страницу, я наследовал от базового контролера страницы новый контроллер для этой страницы и там переопределял метод OnClose(). Это правильно? Да, можно и так. Но теперь мне кажется, что проще будет добавить в базовый контролер страницы событие Close и просто прицеплять к нему разные обработчики этого события. И так и так будет одинаково работать. Результат в итоге один- пользак нажал- выполнилось то, что должно было выполниться. Просто разные стили как это исполнить. Во втором меньше классов и второй короче.
Это не консольные приложения. Это отдельные сценарии, которые выполняют быстро какую-то обработку, выводят что-то и дохнут. Сценарий, который вызывается, чтобы вывести какую-то страницу не будет перехватывать событие удаления пользователя и как-то его обрабатывать.
alexey_baranov Я не говорю, что в PHP нельзя использовать события. Но придумать хороший пример для использования событий достаточно сложно. Первое, что приходит в голову при разговоре о событиях - обработка действий пользователя. Но в web этим обычно занимается JavaScript. Второе, что приходит в голову - изменение состояния при изменении данных. Но в PHP обычно нет системы, которая должна реагировать на изменение данных. Изменение данных сразу подхватывается при следующей загрузке. Потому и возникает вопрос: "А где в PHP событийное программирование к месту? Где получается хорошо и красиво его использовать?"
Volt(220) libevent в том же phpdaemon, в простых скриптах хз где оно там к месту, но реализация на php это обычный паттерн Observer
Volt(220) Ну, во-первых, JavaScript отвечает за обработку событий пользователя только на стороне клиента, а на стороне сервера за это отвечают пхп-контролеры. У меня там будут использоваться события. Как раз про это выше написал. А, во-вторых, вот я не понимаю, почему постоянно спрашивают, где в пхп применять события. Где же их применять красиво в пхп? причем в других языках все понятно где. Вот ты пишешь на любом другом языке? Если пишешь, то ты используешь события только в формах дизайнера или и в прикладных объектах? если и в прикладных тоже, то что тебе мешает это же самое делать в пхп? пхп ничем не отличается от других языков В ЭТОМ (подчеркиваю) . да, скрипт выполняется пару секунд. да, ну и что ? еще раз говорю, открой доктрину и увидешь, Где получается хорошо и красиво их использовать. Если у меня еще раз спросят где в пхп использовать события, буду материться и плеваться. Кто не знает где в пхп использовать события, но хочет это неприменно выяснить, не пишите сюда. пишите, кто знает хорошую обертку событий на пхп 5.3. Спасибо!
у пхп событиев-то одно: он родился =) он должен отрубить свое и как можно скорее застрелиться. Куда там события ляпать... События всегда подазумевают две вещи: это длительность исполнения (затем события и нужны, чтобы можно было простаивать все остальное время), и генератор событий. В пхп параметры передаются, он родится, он пашет, он мре. Все. И чем скорее он мре - тем лучче. По сути пхп скрипты это почти всегда и есть обработчики одного конкретного квантованного события.
Мне казалось, что на сервер передается конкретное событие, которое зашифровано либо в адресе (mysite.ru/blog/post), либо в параметрах (controller=blog&action=post). Далее либо по адресу уже находится обработчик, либо роутер вызывает нужный обработчик. Т.е. ты предлагаешь вместо роутера использовать события? Потому что не видят где. =)) Выше я написал что - отсутствие либо генератора события, либо потребителя. Где конкретно смотреть?
Вот, читаю тему с самого начала, и не нашел слов чтобы эту мысль выразить) Получил запрос, создал объекты, выполнил методы, отдал результат, умер. Всё. В этой цепочке нет места пользовательским событиям. Следующий запрос - это совсем другая история, ничего не знающая о предыдущем запросе.
А symfony2 не смотрел? Вроде как в марте уже будет, как раз 5.3. Даже в текущей 1.4 не будет сложно такое реализовать.
Зачем приходить на форум, чтобы в итоге на говно изойтись? За 550 сообщений не выяснили, что лучшая фраза вызвать бессмысленный флейм, это "не пишите сюда"? Область применения отличается.
В доктрине, эти listener'ы в виду имеете: http://blog.fxposter.org/2009/02/07/hid ... -doctrine/ ? С нормальным событийным программированием они связаны не больше чем preg_replace_callback().
в symfony я имею ввиду такие: товарищ плагин выкидывает эвент: PHP: <?php $this->dispatcher->notify(new sfEvent($this, 'store.transaction.success', array( 'request' => $this->ecomm ))); а наш код на него подписывается: PHP: <?php $this->dispatcher->connect('store.transaction.success', array('TransactionTable', 'handleUpdate'));
Может, топикстартеру всего-то нужен диспатчер, который по определенным параметрам запроса инклудит или выполняет определенные участки кода? Если так - то это не самый сложный механизм, и его написать можно за пару дней. Другое дело - огранизовать достаточный контекст вокруг этого механизма. И тут надо быть очень осторожным - ибо любое разростание грозит тормозами. А еще, как вариант, посмотрите в сторону Delphi for PHP - вот это реально крутая штука - и обертка, как вам хочется, и события, и Ajax генерит сама! И что самое крутое - нативный код, а не интерпертатор =) Не знаю, правда, есть ли ее варианты под *nix серверы...
Volt(220) vasa_c не флудите тему! я не разу не спросил нужны ли в пхп события. Нах вы мне полдня доказываете, что не нужны? всю тему засрали! Если дальше хотите продолжать, вот вам спец тема. туда флудите http://www.php.ru/forum/viewtopic.php?p=251915#251915