- array_merge: documentation ( source)
- array_keys: documentation ( source)
<?php
class Event {
protected $Events;
public function dispatch() {
echo "default Event \n";
}
public function setEvents(Events $events) {
$this->Events = $events;
}
}
class customEvent extends Event {
public function dispatch() {
echo "should be in same notify loop";
}
}
class addedInIterationEvent extends Event {
public function dispatch() {
echo "addedInIterationEvent \n";
$this->Events->addEvent("customEvent",new customEvent());
}
}
class Events {
protected $eventList = array();
public function notify() {
$events = $this->eventList;
for ($i = 0; $i <= sizeof($events); $i++) {
if (isset(array_keys($events)[$i])) {
$eventName = array_keys($events)[$i];
$event = $events[$eventName];
$event->setEvents($this);
$event->dispatch();
$events = array_merge($events,$this->eventList);
echo $eventName;
}
}
}
public function addEvent($name,$event) {
$this->eventList[$name] = $event;
}
}
$events = new Events();
$events->addEvent("basicEvent",new Event);
$events->addEvent("addedInIterationEvent",new addedInIterationEvent);
$events->notify();