Maison  >  Article  >  développement back-end  >  Compréhension et tutoriels pratiques sur les hooks en PHP

Compréhension et tutoriels pratiques sur les hooks en PHP

王林
王林original
2019-11-08 09:27:511861parcourir

Compréhension et tutoriels pratiques sur les hooks en PHP

Définition du Hook

Le Hook est un concept courant en programmation et est très important. Cela rend le système très facile à étendre (sans avoir à comprendre son mécanisme de mise en œuvre interne, ce qui peut réduire beaucoup de travail).

On peut comprendre que lorsqu'une boule de verre tombe du ciel et est sur le point de heurter quelqu'un, un événement se produira à l'avance. Par exemple, dites à la personne qui a été touchée que la balle est déjà en train de tomber.
Raconter est un événement, un crochet On peut faire des réponses différentes à différentes personnes, on lui dit si la balle a touché quelqu'un. ou pas. Si c’est une femme, dis-lui que ça fait mal.

Le rôle des hooks

Les fonctions de hook peuvent intercepter et traiter les messages provenant d'autres applications. Chaque fois qu'un message spécifique est envoyé, le programme hook capture le message avant d'atteindre la fenêtre de destination, c'est-à-dire que la fonction hook obtient d'abord le contrôle. À ce stade, la fonction hook peut traiter (modifier) ​​le message, continuer à transmettre le message sans le traiter ou forcer la fin de la transmission du message.

Implémentation du hook

L'implémentation complète du hook doit être qualifiée de pilotée par les événements. La gestion événementielle est divisée en deux étapes. La première étape consiste à enregistrer les événements, dans le but de donner un nom aux « événements » susceptibles de se produire dans le futur.

La méthode d'implémentation simple est la suivante :

Utilisez le mode singleton pour générer un objet persistant ou enregistrer une variable globale, puis ajoutez le nom de l'événement et la classe correspondant au event Insérez simplement des variables globales avec la méthode. C'est pour monter un crochet.

La deuxième étape consiste à déclencher l'événement, qui consiste essentiellement à interroger la variable globale de l'événement pour connaître le nom de l'événement à déclencher, puis à rechercher la classe et la méthode enregistrées, à instancier et à exécuter. De cette façon, vous pouvez vous débarrasser des règles traditionnelles selon lesquelles les programmes doivent être en ordre et atteindre davantage l’objectif du découplage.

Exemple de code un :

class Ball{
 public function down(){
 echo  "ball is downing ";
 //注册事件
 Hook::add("man");
 Hook::add("Women");
 }
 public function do(){
 Hook::exec();
 }
}
// 钩子的定义
class Hook{
 private $hooklist = null ;
 // 添加
 public function add($people){
 $this->hooklist[] = new $people();
 }
 // 触发事件
 public function exec(){
 foreach($this->hooklist as $people){
   $addon ->act();
 }
 }
}
// 钩子实现
class man(){
 public function act(){
 echo 'notiong';
 }
}
class WoMan(){
 public function act(){
 echo 'oh my god ';
 }
}
class child(){
 public function act(){
 echo 'oh my god ';
 }
}
$ball = new Ball();
$ball ->down();
$ball ->do();

Exemple de code deux :

// 如果需要添加小孩,就可以做添加一个小孩Hook::add("child");
 /*=========================钩子的升级版============================================/*
class Hook{
  private $hookList;
  //添加
 function add($name,$fun){
 $this->hookList[$name][] = $fun;
 }
function excec($name){
  $value = func_get_args();
  unset($value[0]);
  foreach ($this->hookList[$name] as $key => $fun) {
    call_user_func_array($fun, $value);
  }
}
}
$hook = new Hook();
$hook->add('women',function($msg){
 echo 'oh my god'.$msg ;
})
$hook->add('man',function($msg){
 echo 'nothing'.$msg ;
})
// 执行
$hook->excec('man','taoge');
$hook->excec('women','xxx');

Tutoriel recommandé : Tutoriel PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn