За последние 24 часа нас посетили 49912 программистов и 1730 роботов. Сейчас ищут 618 программистов ...

Используются ли в пхп события ?

Тема в разделе "Прочие вопросы по PHP", создана пользователем alexey_baranov, 9 дек 2010.

  1. alexey_baranov

    alexey_baranov Активный пользователь

    С нами с:
    3 фев 2009
    Сообщения:
    647
    Симпатии:
    0
    Адрес:
    Сургут
    Здесь один из примеров использования событий в пхп. Здесь написано, как можно дополнить стандартное поведение доктрины, подписавшись на ее события. Однако, отдельные персоны сомневаются, могло ли такое быть.

    http://www.doctrine-project.org/documen ... /en/events

     
  2. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Господин Баранов, может быть персоны и сомневаются, но ни в одном из своих сомнений не называли вас "отдельной персоной". Убавьте свой праведный гнев.
     
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Я не говорю что события не нужны, я спрашиваю зачем они нужны.
    Да, я понял, что в Доктрине они есть.
    Но используются они не потому что произошло событие и система отреагировала, а потому что Доктрина большая и сложная и проще сделать хак, чем сделать по-человечески.
    К хакам я отношу подмену данных и применения правил бизнес-логики после команды на сохранение. Это возможно красиво и удобно, но ведет к запутыванию системы.

    Единственный, более менее нормальный пример который я увидел это - логирование, но я бы не отнес данное действие к необходимым функциональным свойствам системы.

    Так все же можешь ты привести пример, в который хорошо вписываются события? Кто генератор событий? Кто потребитель?
     
  4. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Событийное программирование в интерактивных программах и то что в доктрине, это совешенно разное.
    Это просто каллбэки, как в preg_replace_callback. Реакция на события, производимые тем же процессом, а не на внешние воздействия.
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    vasa_c
    А какая разница кто производитель?
     
  6. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Используем в своем фреймворке события для сбрасывания кеша при сохранении модели. Рулить этим из модели некрасиво - она вообще ничего про кеш не знает, он завязан на датамапер. Что-то еще реализовывали... про кеш тока запомнилось.
    В общем, не скажу, что это красивое очень решение - требует некой организованности и структурированности применения... но гибкое.
     
  7. alexey_baranov

    alexey_baranov Активный пользователь

    С нами с:
    3 фев 2009
    Сообщения:
    647
    Симпатии:
    0
    Адрес:
    Сургут
    никакой. он просто тупит под вечер. все всю жизнь это называли собитиями, но тут пришел 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) Это кстати тебе ответ, на твой вопрос про пример, где в пхп можно использовать события. У меня куча примеров. я уже заебался сегодня писать вам. С васа_с сначала договорю, потом тебе напишу.
     
  8. shurastik

    shurastik Активный пользователь

    С нами с:
    22 фев 2008
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Латвия
    Угу, принцип открытости-закрытости.
     
  9. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    я думаю, необходимо ТОЧНО определить, что можно называть событием в разрезе реализации. Допустим всем понятно, что такое обсервер, но насколько он попадает под определение события или реализации событийного подхода или типа того - это ведь не понятно никому тут...
     
  10. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Если бы preg_replace_callback() только сообщало о событии "найдено", то от него было бы мало проку. Основная возможность preg_replace_callback() получить от callback некую информацию для замены. А теперь представим что генерируется событие и три объекта на него подписаны и каждый что-то вернет и что в итоге должна подставить функция?

    Когда я получаю экземпляр газеты я не могу изменить в нем статью. Я могу написать письмо в редакцию, возможно его опубликуют, но только в следующем выпуске.
     
  11. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    В PHP события это по сути хуки, которые можно повесить на выполнение до или после каких-то точек.
    В Yii событиями пропитан весь фреймворк и по сути можно строить на событиях приложение +-. правда я пока не дорос до такого и мои потребности более низмены :)
     
  12. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    alexey_baranov, сколько пафоса, сколько гнева, сколько желания доказать этим никчёмным дуракам, как они никчёмны...
     
  13. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Я вообще не любитель спорить о терминах. "Событие", так событие.
    Вот только если смотреть не на термины, а на суть, то по сути, это событие совершенно не то, что в C#.
     
  14. Epsiloncool

    Epsiloncool Активный пользователь

    С нами с:
    29 мар 2011
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    Ufa
    Событие - оно и есть событие, и в C# и в PHP оно может быть реализовано абсолютно идентично. Просто если в C# для этого пришлось создавать целую языковую конструкцию, то в PHP можно обойтись банальным массивом хэндлеров (а так обычно и делают). addHandler - добавляем в массив метод некоего класса, removeHandler - удаляем его. fireEvent - запускаем foreach по вышеупомянутому массиву и вызов каждого метода подряд. Хотите - можно в addHandler добавить признак порядка в очереди (т.е. куда хэндлер запихнуть в очереди хэндлеров) и т.п. Всё банально просто.

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

    Я не теорию вам пишу, всё это реализовано мной и работает. После того, как допилю некоторые вещицы - выложу на обозрение.
     
  15. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Epsiloncool
    Ну вроде никто и не нападает.

    Вообще такие вещи не используются ради использования. К примеру у меня в проекте появилась пара мест, где я понимаю зачем, как и в каком месте я их могу использовать, дабы облегчить себе жизнь. Понимание пришло со временем, по немногу. И это хорошо, постигается истиная сущьность затеи и исключается применение ради применения.
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    угу. можно долго толочь воду в ступе. просто это совершенно разные вещи "события" и необходимость их применения. =)

    аналогичный вопрос прозвучал от мистера магнитно-резонансного Томографа: надо ли экранировать $_SESSION =)

    говорите о разных вещах просто, считая их одним и тем же...
     
  17. Epsiloncool

    Epsiloncool Активный пользователь

    С нами с:
    29 мар 2011
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    Ufa
    Какие такие разные вещи мы считаем "событием". Событие есть событие, callback есть callback :) Callback это не событие)

    Насчёт экранирования $_SESSION не очень понял :)
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Epsiloncool
    не хочу поддерживать бредовую беседу, но уточню: я хотел сказать, что вопросы "плохо или хорошо" или "применять или нет" - не имеют смысла.