#### Названия

Для удобства восприятия, названия хуков формируются по следующему принципу:
Пример: A_beforeGetStandardViews
A - литера обозначающая часть сайта(A - административная backend, C - клиентская, frontend)
before - выполнение коллбека перед действием (before - перед, after - после, может отсутствовать в определённых случаях)
GetStandardViews - название действия, предпочтительно используются названия функции где активикуется коллбек

#### Методы класса

Класс Hook предоставляет функциональность для управления коллбеками (хуками), которые можно привязать к различным событиям в вашем приложении. Хуки позволяют гибко расширять функциональность, выполняя дополнительные действия при наступлении определенных событий.

- add

  `public static function add(string $key, callable|string $callback, int $priority = 10): bool`

  Регистрирует коллбек для указанного события с заданным приоритетом.

  - Параметры:
    - `key` (string): Имя события, к которому привязывается коллбек.
    - `callback` (callable|string): Функция коллбек или имя функции.
    - `priority` (int, optional): Приоритет выполнения коллбека. Чем ниже число, тем выше приоритет. По умолчанию 10.
  - Возвращает: `bool` - Успешность добавления коллбека.

  Пример:

                      Hook::add('onUserRegister', 'sendWelcomeEmail', 10);
                      Hook::add('onUserRegister', function($user) {
                          echo "User registered: " . $user->name;
                      }, 5);

- remove

  `public static function remove(string $key): bool`

  Удаляет все коллбеки для указанного события.

  - Параметры:
    - `key` (string): Имя события, коллбеки которого нужно удалить.
  - Возвращает: `bool` - Успешность удаления коллбеков.

  Пример:

                      Hook::remove('onUserRegister');

- exists

  `public static function exists(string $key): bool`

  Проверяет существование коллбеков для указанного события.

  - Параметры:
    - `key` (string): Имя события, для которого нужно проверить наличие коллбеков.
  - Возвращает: `bool` - Наличие коллбеков для указанного события.

  Пример:

                      if (Hook::exists('onUserRegister')) {
                          echo "Хук 'onUserRegister' зарегистрирован.";
                      }

- run

  `public static function run(string $key, ...$args): void`

  Выполняет все коллбеки для указанного события с переданными аргументами.

  - Параметры:
    - `key` (string): Имя события, для которого нужно выполнить коллбеки.
    - `...$args` (mixed): Аргументы, которые будут переданы коллбекам.
  - Возвращает: `void`

  Пример:

                      Hook::run('onUserRegister', $user);

- getAllHooks

  `public static function getAllHooks(): array`

  Возвращает все зарегистрированные коллбеки и события, к которым они привязаны.

  - Возвращает: `array` - Ассоциативный массив всех зарегистрированных событий и их коллбеков.

  Пример:

                      $allHooks = Hook::getAllHooks();
                      SysClass::pre($allHooks);

#### Примеры использования

Регистрация коллбеков

Вы можете регистрировать коллбеки как анонимные функции, так и функции, определенные в коде. Приоритет выполнения коллбеков определяет порядок их вызова.

            // Определение функции коллбека
            function sendWelcomeEmail($user) {
                echo "Sending welcome email to: " . $user->email . "\n";
            }

            // Регистрация коллбеков
            Hook::add('onUserRegister', 'sendWelcomeEmail', 10);
            Hook::add('onUserRegister', function($user) {
                echo "User registered: " . $user->name . "\n";
            }, 5);
            Hook::add('onOrderPlaced', function($order) {
                echo "Order placed: " . $order->id . "\n";
            }, 10);
            Hook::add('onOrderPlaced', function($order) {
                echo "Notifying logistics for order: " . $order->id . "\n";
            }, 1);

Вызов коллбеков

Коллбеки вызываются методом `run`, который принимает имя события и аргументы для передачи коллбекам.

            // Вызов коллбеков для события onUserRegister
            function registerUser($userData) {
                $user = new stdClass();
                $user->name = $userData['name'];
                $user->email = $userData['email'];

                Hook::run('onUserRegister', $user);
            }

            // Вызов коллбеков для события onOrderPlaced
            function placeOrder($orderData) {
                $order = new stdClass();
                $order->id = $orderData['id'];

                Hook::run('onOrderPlaced', $order);
            }

            // Пример использования функций
            registerUser(['name' => 'John Doe', 'email' => 'john@example.com']);
            placeOrder(['id' => 123]);

Проверка существования и удаление коллбеков

Вы можете проверить, зарегистрирован ли хук, и удалить его, если он больше не нужен.

        // Проверка существования хука
        if (Hook::exists('onUserRegister')) {
            echo "Хук 'onUserRegister' зарегистрирован.";
        }

        // Удаление хука
        Hook::remove('onUserRegister');

Получение всех зарегистрированных хуков

Вы можете получить все зарегистрированные хуки для отладки или анализа.

            // Получение всех зарегистрированных хуков
            $allHooks = Hook::getAllHooks();
            print_r($allHooks);

#### Вывод

Класс Hook предоставляет мощный и гибкий механизм для управления коллбеками в вашем приложении. С помощью методов `add`, `remove`, `exists`, `run` и `getAllHooks` вы можете легко регистрировать, вызывать и управлять хуками для различных событий, обеспечивая расширяемость и модульность вашего кода.