laravel — Понимание систем диспетчеризации событий PHP

Я никогда не делал ничего управляемого событиями в PHP, только Node.js, поэтому я пытаюсь понять, как работают системы диспетчеризации событий в PHP (такие как События Laravel, CakePHP события а также Диспетчер событий Symfony).

Этот пример в документах Laravel:

protected $listen = [
'App\Events\OrderShipped' => [
'App\Listeners\SendShipmentNotification',
],
];

Поскольку время жизни PHP-скрипта, работающего на Apache, по сути является временем жизни запроса, означает ли это, что все слушатели событий создаются при каждом запросе?

Так что, если у меня есть 120 слушателей в моем приложении (т.е. перечислены в этом $listen свойство), все 120 из них будут создаваться при каждом посещении страницы? Или объекты слушателя создаются только при отправке соответствующих событий?

Кажется совершенно неэффективным создание экземпляров слушателей с каждым запросом, когда за всю продолжительность запроса может даже не произойти ни одного события.

Это то, что меня должно волновать?

2

Решение

Как работает система прослушивания событий.

Проще говоря, это просто массив текстовых объектов.

Так что в 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 во время исполнения ничего не происходит

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]