events[$name])){ $this->events[$name] = []; } $this->events[$name][] = $fn; return $this; } public function off(string $name, callable $fn = null){ if(isset($this->events[$name])){ $a = $this->events[$name]; foreach($a as $k => $f){ if(is_null($fn) || $f == $fn){ array_splice($a, $k, 1); } } } return $this; } public function fire(string $name, ...$args){ if(isset($this->events[$name])){ foreach($this->events[$name] as $fn){ if($fn(...$args) === false){ return false; } } } return true; } } ?>