web-dev-qa-db-fra.com

Qu'est-ce qu'un crochet en PHP?

J'ai essayé de chercher sur Google, mais je n'ai trouvé aucun bon tutoriel ou article.

15
tasha-

Vous n'avez probablement rien trouvé car PHP n'a pas de concept de hooks.

Les hooks sont un type de fonction que vous pouvez connecter (ou hook ) à un système existant pour étendre ses fonctionnalités. Ils ne sont pas spécifiques au langage PHP ni à aucun système. Ils peuvent également être appelés plugins, add-ons ou extensions.

Maintenant, bien que PHP n'ait pas de concept de hook, il vous permet de compiler des extensions avec le noyau PHP pour obtenir des fonctionnalités supplémentaires à utiliser dans vos scripts. Il existe de nombreuses extensions PHP groupées par défaut. Ceci est un exemple de ce que j'ai décrit ci-dessus.

32
BoltClock

Oui, les hooks ne sont pas des méthodes natives PHP. Ils sont utilisés pour étendre les fonctionnalités à partir du noyau d'un framework.

Crochets Codeigniter

8
Atticus

Vous pouvez implémenter le modèle observateur avec certains des nouveaux éléments SPL, tels que SplObserver() .

Cela facilite le travail.

3
alex

Vous pouvez émuler des points d'ancrage dans votre propre projet PHP:

1) Créer et inclure la classe suivante:

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;
    }

}

Définissez le nom des hameçons que vous préférez.

2) Vous pouvez maintenant utiliser des points d'ancrage dans votre code, par exemple, après avoir créé un nouvel utilisateur (exemple):

//here is going any code which creates new user  
//hooks
Hooks::apply('ev_after_user_create', array('user_id' => $new_user_id));

3) Définir les actions de crochets de la manière suivante:

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');
    }
});

Tout code d'actions de crochets doit être défini AVANT le code où cette action est nécessaire !

0
realmag777