From aa908ab7bd03818a2cb1f9b4686034f08736d1cb Mon Sep 17 00:00:00 2001 From: Daniel Weipert Date: Thu, 19 Feb 2026 14:52:15 +0100 Subject: initial commit --- src/Hook.php | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/Hook.php (limited to 'src/Hook.php') diff --git a/src/Hook.php b/src/Hook.php new file mode 100644 index 0000000..0b292ce --- /dev/null +++ b/src/Hook.php @@ -0,0 +1,70 @@ +> $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; + } +} -- cgit v1.2.3