Что такое крючок в PHP?

Я пытался найти в Google, но не смог найти ни одного хорошего учебника или статьи.

Ответ 1

Вероятно, вы ничего не нашли, потому что PHP не имеет понятия о крючках в первую очередь.

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

Теперь, в то время как PHP не имеет концепции перехватчиков, он позволяет вам скомпилировать расширения вместе с ядром PHP, чтобы получить дополнительные функции для использования в ваших скриптах. Существует множество расширений PHP в комплекте по умолчанию. Это пример того, что я описал выше.

Ответ 2

Да, хуки не являются родными методами PHP, они используются для расширения функциональности ядра платформы.

Codeigniter Крючки

Ответ 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');
    }
});

Любой код действий хуков должен быть определен ДО кода, где требуется его действие!