Immutable的事件派遣器

3.4 版本
维护中的版本

ImmutableEventDispatcher是一个被锁定或被冻结的事件派遣器。该派遣器不再注册新的监听器或订阅器。

ImmutableEventDispatcher接收另外一个dispatcher连同全部的监听和订阅。这个“不可改变”的immutable dispatcher只是原本的派遣器的一个代理而已。

为了使用它,先创建一个普通的dispatcher(EventDispatcherContainerAwareEventDispatcher),然后注册一些监听或订阅(listeners or subscribers):

1
2
3
4
5
6
7
8
use Symfony\Component\EventDispatcher\EventDispatcher;
 
$dispatcher = new EventDispatcher();
$dispatcher->addListener('foo.action', function ($event) {
    // ...
});
 
// ...

现在,注入一个ImmutableEventDispatcher

1
2
3
4
use Symfony\Component\EventDispatcher\ImmutableEventDispatcher;
// ...
 
$immutableDispatcher = new ImmutableEventDispatcher($dispatcher);

在你的项目中,可以使用这个新的事件派遣器了。

如果你试图执行能够修改dispatcher对象的某个方法(比如addListener),则BadMethodCallException异常就会抛出。

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)