Я пытался найти в Google, но не смог найти ни одного хорошего учебника или статьи.
Что такое крючок в PHP?
Ответ 1
Вероятно, вы ничего не нашли, потому что PHP не имеет понятия о крючках в первую очередь.
Крючки - это своего рода функция, которую вы можете подключить (или подключить) к существующей системе, чтобы расширить ее функциональность. Они не относятся к языку PHP или к какой-либо системе. Их также можно назвать плагинами, надстройками или расширениями.
Теперь, в то время как PHP не имеет концепции перехватчиков, он позволяет вам скомпилировать расширения вместе с ядром PHP, чтобы получить дополнительные функции для использования в ваших скриптах. Существует множество расширений PHP в комплекте по умолчанию. Это пример того, что я описал выше.
Ответ 2
Да, хуки не являются родными методами PHP, они используются для расширения функциональности ядра платформы.
Ответ 3
Вы можете реализовать шаблон наблюдателя с некоторыми новыми материалами SPL, такими как SplObserver()
.
Это упрощает работу с.
Ответ 4
Вы можете эмулировать хуки в своем собственном PHP-проекте:
1) Создать и включить следующий класс:
class Hooks {
private static $actions = array(
'ev_after_user_create' => array(),
'ev_after_user_profile_update' => array()
);
public static function apply($hook, $args = array()) {
if (!empty(self::$actions[$hook])) {
foreach (self::$actions[$hook] as $f) {
$f($args);
}
}
}
public static function add_action($hook, $function) {
self::$actions[$hook][] = $function;
}
}
Определите там название крючков, которые вы предпочитаете.
2) Теперь вы можете использовать хуки в вашем коде, например, для do smth после создания нового пользователя (пример):
//here is going any code which creates new user
//hooks
Hooks::apply('ev_after_user_create', array('user_id' => $new_user_id));
3) Определите действия хуков следующим образом:
Hooks::add_action('ev_after_user_create', function($args) {
if (Router::$application === 'front') {
require_model('users-data');
$ud = new MUsersData(8);
$ud->update_data($ud->create_page(), $args, 'id');
}
});
Любой код действий хуков должен быть определен ДО кода, где требуется его действие!