3

所以我基本上想这样做:

$this->container['Menu_builder'] = $this->container->factory(function ($c) {
    return new Menu_builder($parameter_1, $parameter_2);
});

从调用传入的位置$parameter_1$parameter_2位置,如下所示:

$menu_builder = $this->container['Menu_builder']('account', 'reset_password');

我知道上面的语法不正确,但我想将这些字符串传递给对$this->container->factory.

这可能吗?

例如,如果我想从各种控制器函数中实例化 Menu_builder,每个控制器函数具有不同的参数。

4

2 回答 2

3

FWIW,您还可以在容器中包含匿名函数。

$this->container['Menu_builder'] = function() {
    // do stuff here

    return function($parameter_1, $parameter_2) {
        return new Menu_builder($parameter_1, $parameter_2);
    };
};

使用这种方式:

$localfunc = $this->container['Menu_builder'];
$result = $localfunc($parameter_1, $parameter_2);

请注意,在这种情况下,我没有使用工厂。那是因为您每次都可以使用不同的值执行匿名函数。

于 2017-02-01T23:21:02.427 回答
2

您可以使用use()将变量传递给匿名函数,例如

//your parameters needs to be defined here:
$parameter_1 = "XY";
$parameter_2 = 42;

$this->container['Menu_builder'] = $this->container->factory(function ($c)use($parameter_1, $parameter_2) {
                                                                        //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ See here
    return new Menu_builder($parameter_1, $parameter_2);
});
于 2015-05-19T21:58:40.533 回答