Для удобства восприятия, названия хуков формируются по следующему принципу:
Пример: A_beforeGetStandardViews
A - литера обозначающая часть сайта(A - административная backend, C - клиентская, frontend)
before - выполнение коллбека перед действием (before - перед, after - после, может отсутствовать в определённых случаях)
GetStandardViews - название действия, предпочтительно используются названия функции где активикуется коллбек
Класс Hook предоставляет функциональность для управления коллбеками (хуками), которые можно привязать к различным событиям в вашем приложении. Хуки позволяют гибко расширять функциональность, выполняя дополнительные действия при наступлении определенных событий.
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);
public static function remove(string $key): bool
Удаляет все коллбеки для указанного события.
key (string): Имя события, коллбеки которого нужно удалить.bool - Успешность удаления коллбеков.Пример:
Hook::remove('onUserRegister');
public static function exists(string $key): bool
Проверяет существование коллбеков для указанного события.
key (string): Имя события, для которого нужно проверить наличие коллбеков.bool - Наличие коллбеков для указанного события.Пример:
if (Hook::exists('onUserRegister')) {
echo "Хук 'onUserRegister' зарегистрирован.";
}
public static function run(string $key, ...$args): void
Выполняет все коллбеки для указанного события с переданными аргументами.
key (string): Имя события, для которого нужно выполнить коллбеки....$args (mixed): Аргументы, которые будут переданы коллбекам.voidПример:
Hook::run('onUserRegister', $user);
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 вы можете легко регистрировать, вызывать и управлять хуками для различных событий, обеспечивая расширяемость и модульность вашего кода.