Событие
Оригинальное название: event
Коротко
Сигнал о том, что в программе что-то произошло: пользователь нажал кнопку, заказ оплачен, файл загружен. Другой код может подписаться на событие и отреагировать на него.
Что такое «Событие»
Событийная модель разделяет две роли. Источник сообщает: «произошло вот это» — и не знает, кто его слушает. Подписчики регистрируют свои функции-обработчики и получают уведомление. Источнику не нужно меняться, когда появляется новый подписчик. Поэтому события — главный способ расширять программы, не трогая их код, и снижать связанность между модулями.
Событие обычно несёт данные: какой элемент нажат, какой заказ оплачен, с какими полями создан товар. Обработчик, который на него реагирует, разобран в статье про обработчик события.
Где встречаются события
- В браузере:
click,submit,input,scroll. На них построена вся интерактивность страниц. - В CMS: WordPress вызывает хуки действий при сохранении записи или оформлении заказа, 1С-Битрикс — события модулей.
- Между системами: сервис оплаты или CRM отправляет на сайт HTTP-запрос о произошедшем — это вебхук.
- В очередях сообщений: событие кладут в брокер, а обработчики забирают его, когда готовы.
Пример: событие в 1С-Битрикс
Чтобы при добавлении элемента инфоблока выполнить своё действие, в /local/php_interface/init.php регистрируют обработчик:
use Bitrix\Main\EventManager;
EventManager::getInstance()->addEventHandler(
'iblock',
'OnAfterIBlockElementAdd',
function (array &$fields) {
// например, отправить уведомление о новом товаре
}
);
Ядро и модуль инфоблоков не меняются, поэтому доработка переживает обновления. Такие задачи обычно входят в доработку сайта на 1С-Битрикс.
На что обратить внимание
Когда обработчиков много, становится трудно проследить, что именно происходит после одного действия. Тяжёлая работа в обработчике, например запрос к внешнему API, замедляет основное действие — пользователь ждёт, пока выполнятся все подписчики. Такие задачи лучше откладывать в очередь или агент. И ещё одна ловушка: обработчик, который сам вызывает то же событие, может уйти в бесконечный цикл.

