public function attach($name, $callback, $priority = 0) { $this->events->insert(array($name, $callback), $priority); } public function trigger($name, $params = array(), $callback = null) { foreach ($this->events as $event) { if ($event[0] = $name) { $e = new Event($name, $params); if ($r = $event[1]($e)) { if (is_callable($callback)) { $callback($r); } } } } } } $events = new EventManager(); $events->attach('do', function ($e) { echo "Registered first\n"; return "Hello SALAM"; }, 102); $events->attach('do', function ($e) { echo "Registered second\n"; return time(); }, 101); $return = $events->trigger('do', array('a', 'b', 'c'), function ($r) { echo "<h1>{$r}</h1>\n"; }); echo "<h1>{$return}</h1>";
} class EventManager { private $events = array(); public function attach($name, $callback) { $this->events[$name][] = $callback; } public function trigger($name, $params = array()) { foreach ($this->events[$name] as $event => $callback) { $e = new Event($name, $params); $callback($e); } } } $events = new EventManager(); $events->attach('do', function ($e) { echo $e->getName() . "\n"; print_r($e->getParams()); }); $hello = ['a' => 'qwerty', 'b' => time()]; $events->attach('do', function ($e) use($hello) { echo "<br/> Second Chance"; echo $e->getName() . "\n"; print_r($e->getParams()); print_r($hello); return array(time()); }); echo "<hr/>"; echo $events->trigger('do', array('a', 'b', 'c'));