Tout d'abord, Un hook est un mécanisme de déclenchement, comme un piège Lorsque le programme s'exécute quelque part, le piège sera déclenché puis exécuté. Une fois l'exécution de ce Hook terminée, le système continue en fonction des différents résultats de l'exécution.
Alors, quel est le principe du mécanisme de hook de thinkphp ?
1. Le framework appelle la méthode d'importation dans la classe Hook dans le comportement du mode de chargement par lots ThinkThink->start()
: la valeur par défaut est le fichier de configuration dans <.>. Extension de comportement de définition de fichier Modelcommon.php
2, le comportement de surveillance des balises de balise via la méthode Hook:listen(). . Défini dans la classe Hook Un tableau de balises : tag is key; Behavior is value Exécutez le plug-in de comportement de la balise via Hook:exec()
/** * 监听标签的插件 * @param string $tag 标签名称 * @param mixed $params 传入参数 * @return void */ static public function listen($tag, &$params=NULL) { if(isset(self::$tags[$tag])) { if(APP_DEBUG) { G($tag.'Start'); trace('[ '.$tag.' ] --START--','','INFO'); } foreach (self::$tags[$tag] as $name) { APP_DEBUG && G($name.'_start'); $result = self::exec($name, $tag,$params); if(APP_DEBUG){ G($name.'_end'); trace('Run '.$name.' [ RunTime:'.G($name.'_start',$name.'_end',6).'s ]','','INFO'); } if(false === $result) { // 如果返回false 则中断插件执行 return ; } } if(APP_DEBUG) { // 记录行为的执行日志 trace('[ '.$tag.' ] --END-- [ RunTime:'.G($tag.'Start',$tag.'End',6).'s ]','','INFO'); } } return; } /** * 执行某个插件 * @param string $name 插件名称 * @param string $tag 方法名(标签名) * @param Mixed $params 传入的参数 * @return void */ static public function exec($name, $tag,&$params=NULL) { if('Behavior' == substr($name,-8) ){ // 行为扩展必须用run入口方法 $tag = 'run'; } $addon = new $name(); return $addon->$tag($params); }
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!