【发布时间】:2015-11-12 12:52:16
【问题描述】:
我有一个Module 类,在其onBootstrap(...) 中有多个“内联”事件侦听器:
...
class Module
{
public function onBootstrap(MvcEvent $mvcEvent)
{
...
$foo = ...;
...
$halPlugin = $viewHelperManager->get('Hal');
$halPlugin->getEventManager()->attach('bar', function ($event) {
...
});
...
$halPlugin->getEventManager()->attach('baz', function ($event) use ($foo)
{
...
});
...
}
...
}
现在,为了保持/使Module#onBootstrap(...) 苗条,我想将侦听器从闭包移动到单独的方法。 onBar 事件监听器没问题。但它不适用于onBaz,需要额外输入:
...
class Module
{
public function onBootstrap(MvcEvent $mvcEvent)
{
...
$halPlugin->getEventManager()->attach('bar', [$this, 'onBar']);
...
}
...
public function onBar()
{
...
}
public function onBaz() // <-- How to pass $foo to the method?
{
// Some stuff, that needs $foo...
...
}
}
在原始变体中,此输入通过use 指令传递到闭包中。但是现在该怎么做呢?
如何将事件侦听器的逻辑(附加在Module#onBootstrap(...) 中)从带有use 语句的闭包中移动到单独的方法中并向其传递参数?
【问题讨论】:
标签: php event-handling zend-framework2 closures