getMethods() as $method) { if (is_a($method->class, get_class(), TRUE)) { $eventPattern = []; if (preg_match('/^on(.*)/', $method->name, $eventPattern)) { $this->_registerEventHandler( $eventPattern[1], $method->getClosure($this) ); } } } if (get_class() === get_called_class()) { $directory = dirname(__FILE__); foreach (scandir($directory) as $dirEntry) { $classNameMatch = []; if (preg_match('/(.*)\.php$/', $dirEntry, $classNameMatch)) { $className = $classNameMatch[1]; include_once($directory . DIRECTORY_SEPARATOR . $dirEntry); if ($className != get_class() && is_a($className, get_class(), TRUE)) { $class = new $className(); $class->init(NULL); } } } } } protected static $_handlers = []; private function _registerEventHandler(string $event, callable $handler) { if (!isset(self::$_handlers[$event])) { self::$_handlers[$event] = []; } self::$_handlers[$event][] = $handler; } public function raiseApplicationEvent(string $event, ...$params) { if (isset(self::$_handlers[$event])) { foreach (self::$_handlers[$event] as $handler) { call_user_func_array($handler, $params); } } } } ?>