# 事件分发器(进阶) 事件分发器是以上所有注解事件执行函数的一个分发器,如果你在上一章已经学会了如何创建自定义注解,那么本章就来说明如何用内置的事件分发器进行分发自定义事件。 如果你不需要了解或自定义有关事件分发的功能,此处可无需阅读。 ## 属性 - 类名:`ZM\Event\EventDispatcher` ## 方法 ### EventDispatcher::interrupt() 阻断当前正在运行的事件,只能在事件内部被调用的函数中实现。 ### __construct() 构造方法。 ```php EventDispatcher::__construct(string $class = '') ``` 初始化一个事件分发器,可进行一系列设置,对事件分发做限定。 #### 参数 `$class`:设置要分发的事件对应的注解类名,支持自定义注解(例如 `CQMessage::class`) ### setRuleFunction() 设置函数触发规则判定的函数(就是在执行事件函数前执行的规则判定) ```php setRuleFunction(callable $rule = null) ``` #### 参数 `$rule`:支持回调或闭包。闭包的参数为执行对应事件函数所绑定的注解事件对象。 ```php $dispatcher = new EventDispatcher(CustomEvent::class); $dispatcher->setRuleFunction(function($obj) { return $obj->name == "zhamao" ? true : false; }); ``` 上方的 `$obj` 就是 CustomEvent 类的实例,参数绑定为注解中对应的参数。 ### setResultFunction() 设置事件函数返回值处理的回调函数。 ```php setReturnFunction(callable $return_func) ``` #### 参数 `$return_func`:设置事件函数返回值处理的回调函数,回调参数绑定为对应单独事件函数的返回值。 ```php $dispatcher = new EventDispatcher(CustomEvent::class); $dispatcher->setReturnFunction(function($return) { if (is_string($return)) Console::info("函数返回了 ".$return); }); ``` ### dispatchEvents() 开始分发事件。 ```php dispatchEvents(...$params) ``` #### 参数 自定义参数,这里填入的参数将被填入被分发的函数参数中。 ```php $dispatcher->dispatchEvents("foo", "bar"); ``` ```php