Heim  >  Artikel  >  Backend-Entwicklung  >  Verständnis und praktische Tutorials zu Hooks in PHP

Verständnis und praktische Tutorials zu Hooks in PHP

王林
王林Original
2019-11-08 09:27:511868Durchsuche

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();

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

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!

Stellungnahme:
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
Vorheriger Artikel:PHP-MySQL-BetriebsdatenbankNächster Artikel:PHP-MySQL-Betriebsdatenbank