Verständnis und praktische Tutorials zu Hooks in PHP

王林
Freigeben: 2023-04-07 18:42:02
Original
1884 Leute haben es durchsucht

Verständnis und praktische Tutorials zu Hooks in PHP

Hook-Definition

Hook ist ein gängiges Konzept in der Programmierung und sehr wichtig. Dadurch lässt sich das System sehr einfach erweitern (ohne den internen Implementierungsmechanismus verstehen zu müssen, was viel Arbeit reduzieren kann).

Es ist verständlich, dass, wenn eine Glaskugel vom Himmel fällt und dabei ist, jemanden zu treffen, im Voraus ein Ereignis eintritt. Sagen Sie der Person, die getroffen wurde, zum Beispiel, dass der Ball bereits fällt.
Das Erzählen ist ein Ereignis, ein Haken. Wenn es ein Mann ist, sagen wir ihm, ob der Ball jemanden getroffen hat oder nicht. Wenn es eine Frau ist, sag ihr, dass es weh tut.

Die Rolle von Hooks

Hook-Funktionen können Nachrichten von anderen Anwendungen abfangen und verarbeiten. Immer wenn eine bestimmte Nachricht gesendet wird, erfasst das Hook-Programm die Nachricht, bevor sie das Zielfenster erreicht, d. h. die Hook-Funktion übernimmt zuerst die Kontrolle. Zu diesem Zeitpunkt kann die Hook-Funktion die Nachricht verarbeiten (ändern), die Nachricht weiter übermitteln, ohne sie zu verarbeiten, oder das Ende der Nachrichtenübermittlung erzwingen.

Hook-Implementierung

Die vollständige Implementierung von Hook sollte als ereignisgesteuert bezeichnet werden. Das Fahren von Ereignissen ist in zwei Phasen unterteilt. Die erste Phase besteht darin, Ereignisse zu registrieren, um „Ereignissen“, die in der Zukunft auftreten können, einen Namen zu geben.

Die einfache Implementierungsmethode lautet:

Verwenden Sie den Singleton-Modus, um ein persistentes Objekt zu generieren oder eine globale Variable zu registrieren, und fügen Sie dann den Ereignisnamen und die entsprechende Klasse hinzu event Fügen Sie einfach globale Variablen mit der Methode ein. Das heißt, einen Haken zu montieren.

Die zweite Stufe besteht darin, das Ereignis auszulösen, was im Wesentlichen darin besteht, die globale Ereignisvariable nach dem Namen des auszulösenden Ereignisses abzufragen, dann die registrierte Klasse und Methode zu finden, zu instanziieren und auszuführen. Auf diese Weise können wir die traditionellen Regeln, nach denen Programme in Ordnung sein müssen, loswerden und den Zweck der Entkopplung weiter erreichen.

Codebeispiel eins:

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();
Nach dem Login kopieren

Codebeispiel zwei:

// 如果需要添加小孩,就可以做添加一个小孩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');
Nach dem Login kopieren

Empfohlenes Tutorial: PHP-Tutorial

Das obige ist der detaillierte Inhalt vonVerständnis und praktische Tutorials zu Hooks in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage