Я никогда не делал ничего управляемого событиями в PHP, только Node.js, поэтому я пытаюсь понять, как работают системы диспетчеризации событий в PHP (такие как События Laravel, CakePHP события а также Диспетчер событий Symfony).
Этот пример в документах Laravel:
protected $listen = [
'App\Events\OrderShipped' => [
'App\Listeners\SendShipmentNotification',
],
];
Поскольку время жизни PHP-скрипта, работающего на Apache, по сути является временем жизни запроса, означает ли это, что все слушатели событий создаются при каждом запросе?
Так что, если у меня есть 120 слушателей в моем приложении (т.е. перечислены в этом $listen
свойство), все 120 из них будут создаваться при каждом посещении страницы? Или объекты слушателя создаются только при отправке соответствующих событий?
Кажется совершенно неэффективным создание экземпляров слушателей с каждым запросом, когда за всю продолжительность запроса может даже не произойти ни одного события.
Это то, что меня должно волновать?
Как работает система прослушивания событий.
Проще говоря, это просто массив текстовых объектов.
Так что в Symfony вы можете сделать что-то вроде этого
$eventManager->dispatch('my_cool_event_name', $eventPayload);
Затем он будет искать все, что слушает событие my_cool_event_name
просто делая массив искать
$events = [
'my_cool_event_name' => [
'events\notifyController::email',
'events\notifyController::text',
'events\notifyController::tweet',
],
'another_event' => [
]
];
Таким образом, из приведенного выше примера массива было найдено 3 события my_cool_event_name
потом будет инстанцировать events\notifyController
и запустить методы, проходящие через $eventPayload
к каждому событию.
Если вы никогда не отправили my_cool_event_name
во время исполнения ничего не происходит
Других решений пока нет …