Внедрение зависимости через PHP callback
В данном случае, контейнер будет использовать зарегистрированный PHP callback для создания новых экземпляров класса. Каждый раз при вызове [[yii\di\Container::get()]] вызывается соответствующий callback. Callback отвечает за разрешения зависимостей и внедряет их в соответствии с вновь создаваемыми объектами. Например,
$container->set('Foo', function () {
$foo = new Foo(new Bar);
// ... дополнительная инициализация
return $foo;
});
$foo = $container->get('Foo');
Для того, чтобы скрыть сложную логику инициализации нового объекта, можно использовать статический метод, возвращающий callable:
class FooBuilder
{
public static function build()
{
$foo = new Foo(new Bar);
// ... дополнительная инициализация ...
return $foo;
}
}
$container->set('Foo', ['app\helper\FooBuilder', 'build']);
$foo = $container->get('Foo');
Теперь тот, кто будет настраивать класс Foo
, не обязан знать, как этот класс устроен.