<?php
class EventBus
{
public function addEventListener(Listener $listener)
{
$this->listeners[] = $listener;
}
public function dispatch(Event ...$events)
{
foreach($events as $event){
foreach($this->listeners as $listener){
$listener->when($event);
}
}
}
}
abstract class Listener
{
public function __construct(EventBus $bus)
{
$bus->addEventListener($this);
}
public function when(Event $event)
{
$method = explode('\\', get_class($event));
$method = 'on' . end($method);
if (method_exists($this, $method)) {
$this->$method($event);
}
}
}
class SendEmailListener extends Listener
{
public function onMemberRegistered(Event $event)
{
// send email
}
}
$eventBus = new EventBus;
new SendEmailListener($eventBus);
Deprecated: Creation of dynamic property EventBus::$listeners is deprecated in /in/LTG2d on line 7
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Deprecated: Creation of dynamic property EventBus::$listeners is deprecated in /in/LTG2d on line 7