Здесь один из примеров использования событий в пхп. Здесь написано, как можно дополнить стандартное поведение доктрины, подписавшись на ее события. Однако, отдельные персоны сомневаются, могло ли такое быть. http://www.doctrine-project.org/documen ... /en/events
Господин Баранов, может быть персоны и сомневаются, но ни в одном из своих сомнений не называли вас "отдельной персоной". Убавьте свой праведный гнев.
Я не говорю что события не нужны, я спрашиваю зачем они нужны. Да, я понял, что в Доктрине они есть. Но используются они не потому что произошло событие и система отреагировала, а потому что Доктрина большая и сложная и проще сделать хак, чем сделать по-человечески. К хакам я отношу подмену данных и применения правил бизнес-логики после команды на сохранение. Это возможно красиво и удобно, но ведет к запутыванию системы. Единственный, более менее нормальный пример который я увидел это - логирование, но я бы не отнес данное действие к необходимым функциональным свойствам системы. Так все же можешь ты привести пример, в который хорошо вписываются события? Кто генератор событий? Кто потребитель?
Событийное программирование в интерактивных программах и то что в доктрине, это совешенно разное. Это просто каллбэки, как в preg_replace_callback. Реакция на события, производимые тем же процессом, а не на внешние воздействия.
Используем в своем фреймворке события для сбрасывания кеша при сохранении модели. Рулить этим из модели некрасиво - она вообще ничего про кеш не знает, он завязан на датамапер. Что-то еще реализовывали... про кеш тока запомнилось. В общем, не скажу, что это красивое очень решение - требует некой организованности и структурированности применения... но гибкое.
никакой. он просто тупит под вечер. все всю жизнь это называли собитиями, но тут пришел vasa_c и сказал, что с сегодняшнего дня все что в одном потоке уже не события. vasa_c Если тебе мало доктрины, открой NHibernate. Это брат близнец второй доктрины под .НЕТ Там увидешь точно такой же событийный механизм, как в статье выше. Только в .НЕТ события имеют синтаксическую встроенную поддержку. И там вместо самописных классов ключевые слова Event и специальные операторы на подписку. NHibernate тоже работает в одном потоке. Ты надеюсь не думаешь, что и там слово Event написали по ошибке?! И если к примеру я делаю в .НЕТ TreeNode.Expand() вызывается событие BeforeExpand и AfterExpand(В ТОМ ЖЕ ПОТОКЕ), если я напишу TextBox.Text= фвыафы, вызывается событие BeforeChange и AfterChange ? Где написано, что события это только из другого потока?? не тупи Кстати, ты будешь сильно не согласен, но колбэк в preg_replace_callback, про который ты говорил - это тоже событие. Если бы регулярка была объеком, как в других языках, у нее было бы событие Match, на которое можно было бы подписаться. А объект регуляки делал бы OnMatch(), вызывая всех подписавшихся на событие Match по очереди. И пох что они в одном потоке. То, что это событие у тебя же не вызывает сомнения? А именно это и происходит в preg_replace_callback(). Volt(220) Это кстати тебе ответ, на твой вопрос про пример, где в пхп можно использовать события. У меня куча примеров. я уже заебался сегодня писать вам. С васа_с сначала договорю, потом тебе напишу.
я думаю, необходимо ТОЧНО определить, что можно называть событием в разрезе реализации. Допустим всем понятно, что такое обсервер, но насколько он попадает под определение события или реализации событийного подхода или типа того - это ведь не понятно никому тут...
Если бы preg_replace_callback() только сообщало о событии "найдено", то от него было бы мало проку. Основная возможность preg_replace_callback() получить от callback некую информацию для замены. А теперь представим что генерируется событие и три объекта на него подписаны и каждый что-то вернет и что в итоге должна подставить функция? Когда я получаю экземпляр газеты я не могу изменить в нем статью. Я могу написать письмо в редакцию, возможно его опубликуют, но только в следующем выпуске.
В PHP события это по сути хуки, которые можно повесить на выполнение до или после каких-то точек. В Yii событиями пропитан весь фреймворк и по сути можно строить на событиях приложение +-. правда я пока не дорос до такого и мои потребности более низмены
alexey_baranov, сколько пафоса, сколько гнева, сколько желания доказать этим никчёмным дуракам, как они никчёмны...
Я вообще не любитель спорить о терминах. "Событие", так событие. Вот только если смотреть не на термины, а на суть, то по сути, это событие совершенно не то, что в C#.
Событие - оно и есть событие, и в C# и в PHP оно может быть реализовано абсолютно идентично. Просто если в C# для этого пришлось создавать целую языковую конструкцию, то в PHP можно обойтись банальным массивом хэндлеров (а так обычно и делают). addHandler - добавляем в массив метод некоего класса, removeHandler - удаляем его. fireEvent - запускаем foreach по вышеупомянутому массиву и вызов каждого метода подряд. Хотите - можно в addHandler добавить признак порядка в очереди (т.е. куда хэндлер запихнуть в очереди хэндлеров) и т.п. Всё банально просто. На вопрос "зачем нужны события в PHP" отвечу так. Если прога на PHP представляет собой скрипт, который что-то создаёт из ничего, что-то меняет и потом дохнет, то ему события категорически не нужны. Однако, скрипты могут быть написаны с расчётом на то, что какая-то часть системных данных скрипта (состояния объектов, например) будут сохраняться в БД или ещё где-то для реализации персистентности, то события в данном случае - вещь очень нужная и необходимая. Так как вышеупомянутые массивы хэндлеров могут быть очень запросто сохранены в том же самом персистентном хранилище и при следующем запросе PHP "вспомнит" про них и будет думать - какие обрабатывать, какие нет, и так далее. Появляется офигительная возможность посылать события "спящему" PHP из яваскрипта, реализуя, таким образом, весьма удобный и прозрачный AJAX. Я не теорию вам пишу, всё это реализовано мной и работает. После того, как допилю некоторые вещицы - выложу на обозрение.
Epsiloncool Ну вроде никто и не нападает. Вообще такие вещи не используются ради использования. К примеру у меня в проекте появилась пара мест, где я понимаю зачем, как и в каком месте я их могу использовать, дабы облегчить себе жизнь. Понимание пришло со временем, по немногу. И это хорошо, постигается истиная сущьность затеи и исключается применение ради применения.
угу. можно долго толочь воду в ступе. просто это совершенно разные вещи "события" и необходимость их применения. =) аналогичный вопрос прозвучал от мистера магнитно-резонансного Томографа: надо ли экранировать $_SESSION =) говорите о разных вещах просто, считая их одним и тем же...
Какие такие разные вещи мы считаем "событием". Событие есть событие, callback есть callback Callback это не событие) Насчёт экранирования $_SESSION не очень понял
Epsiloncool не хочу поддерживать бредовую беседу, но уточню: я хотел сказать, что вопросы "плохо или хорошо" или "применять или нет" - не имеют смысла.