> $actions */ private static array $actions; /** * @var array> $filters */ private static array $filters; /** * @param string $name * @param callable $function */ public static function addAction(string $name, callable $function, int $priority = 10): void { self::$actions[$name][$priority][] = $function; } /** * @param string $name * @param array $parameters */ public static function runAction(string $name, ...$parameters): void { $actions = self::$actions[$name] ?? []; foreach ($actions as $priority => $functions) { foreach ($functions as $function) { call_user_func_array($function, $parameters); } } } /** * @param string $name * @param callable $function */ public static function addFilter(string $name, callable $function, int $priority = 10): void { self::$filters[$name][$priority][] = $function; } /** * @param string $name * @param mixed $value * @param array $parameters * * @return mixed */ public static function applyFilter(string $name, mixed $value, ...$parameters): mixed { $filteredValue = $value; $filters = self::$filters[$name] ?? []; foreach ($filters as $priority => $functions) { foreach ($functions as $function) { $filteredValue = call_user_func_array($function, [$value, ...$parameters]); } } return $filteredValue; } }