> #### 钩子 可以理解为设计模式中的观察者模式 , 亦或者是函数式编程中的异步事件。
> 钩子的实现需要两个步骤 :
> 一是 定义触发事件或称之为**监听** ,
> 二是事件发生时需要做的事情或称之为**行为**,这两个一起才能实现一个钩子。
> 在观察者设计模式中 , 当程序走到这时 , 执行我们事先已经准备好的方法。
> 使用hook将关系不紧密的业务逻辑进行分离 , 或者是把一些使用比较频繁密集的操作用hook进行同一分发 , 即做到了同一管理 、方便后期维护与更新 ,而且实现了代码的高度复用 , AOP思想的最佳实践。
**实现方式:**
1、定义行为 , 由于一个事件可能不止一个行为会有多个 , 我们给他们用一个标签将这一些行为集合在一起
```
return [
// 记录异常日志
'log_report'=>array('Core\Initializer\Behavior\LogBehavior'),
];
```
2、放置监听 , 在标签对应的行为被导入之后 , 我们就可以在任意一个位置放置一个监听程序。
```
\Think\Hook::listen('mytag1');
```