Hook est un mécanisme de traitement de messages basé sur des événements qui peut 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 qu'il n'atteigne la fenêtre de destination. la fonction hook prend le contrôle en premier.
Implémentation du hook
L'implémentation complète du hook doit être qualifiée de pilotée par les événements. La gestion des événements est divisée en deux étapes. La première étape consiste à enregistrer les événements. Le but est de donner un nom aux « événements » qui peuvent se produire dans le futur. La méthode d'implémentation simple consiste à utiliser le mode singleton pour générer un objet persistant. Ou enregistrez une variable globale, puis insérez le nom de l'événement, la classe et la méthode correspondant à l'événement dans la variable globale. 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 manière, nous pouvons nous débarrasser de la règle traditionnelle selon laquelle les programmes doivent être en ordre et atteindre davantage l’objectif du découplage.
Exemple de code unclass 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é : "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!