Что такое хук в PHP? - PullRequest
       9

Что такое хук в PHP?

17 голосов
/ 09 мая 2011

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

Ответы [ 4 ]

35 голосов
/ 09 мая 2011

Вы, вероятно, ничего не могли найти, потому что в PHP нет концепции хуков.

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

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

8 голосов
/ 09 мая 2011

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

Крюки Codeigniter

3 голосов
/ 09 мая 2011

Вы можете реализовать шаблон наблюдателя с некоторыми новыми компонентами SPL, такими как SplObserver().

. С ним проще работать.

2 голосов
/ 15 ноября 2018

Вы можете эмулировать хуки в своем собственном 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');
    }
});

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...