PHP依赖注入容器与工厂

时间:2016-04-06 13:06:37

标签: php dependency-injection subclass pimple

我正在使用silexphp/Pimple依赖注入容器(DIC),并且不确定如何处理经典的Factory模式。

示例:

父类Animal.php有两个名为DogAnimal.phpCatAnimal.php的子类。子类的数量可以增长。

在这种情况下,我想创建一个Factory来创建新的Animal对象或Animal类的子对象。 Pimple允许每个服务创建Factory方法。

在使用Pimple DIC时,我认为我不想将每个子类(Dog,Cat等)添加为服务。特别是随着名单的增长。对我来说,这似乎是对DIC的滥用,但也许我错了。

我是否认为我应该创建动物工厂服务并使用Pimple将依赖项注入工厂,而这又依赖于创建新的Dog或Cat?

1 个答案:

答案 0 :(得分:3)

是的,你是对的。您可以创建一个服务(AnimalFactory)来创建您要使用的对象(DogAnimalCatAnimal,...)。

一个简单的例子可以是:

class AnimalFactory
{
    public function createAnimal($name)
    {
        // some logic here with $name

        $animal = new ...();
        return $animal;
    }
}

$pimple['animal_factory'] = function ($c) {
    return new AnimalFactory();
};

$dog = $pimple['animal_factory']->createAnimal('Dog');