## 注入与监听
在插件开发时很有用,我们可以在不改动原逻辑代码的情况下修改应用的运行逻辑,与添加新的功能
> 注入钩子
~~~
Listen::hook($name, $arguments = []);
~~~
| 参数 | 默认值 | 说明 |
| --- | --- | --- |
| $name | 空 | 监听名称 |
| $arguments | 空 | 传递参数 |
例子:
~~~
Listen::hook('appBeforeCreate', [&$appClass, &$appAction]);
~~~
> 监听钩子
~~~
Listen::on($name, $callback = '');
~~~
| 参数 | 默认值 | 说明 |
| --- | --- | --- |
| $name | 空 | 注入名称 |
| $callback | 空 | 注入逻辑 |
例子:
~~~
Listen::on('appBeforeCreate', function(&$appClass, &$appAction) {
$appClass = 'newAppClass';
$appAction = 'newAppAction';
});
~~~
> 说明:我们先注入了一个钩子,在应用开始创建时,传递了`$appClass`即将运行的控制器类名与`$appAction`方法的`引用`,然后可在应用创建之前写入监听代码来实现修改即将运行的控制器与具体方法。从而改变应用解析的方式,我们甚至于可以在此钩子改变整个应用的解析方式,但是不建议这么做,应为解析方式的改变意味着应用的门锁换掉,那么我们之前的钥匙可能会全部失效。但是我们可以做更有意义的事情,比如修改某一个控制器的逻辑。