2013-05-03 194 views
1

我目前正在创建基于OOP原则的东西,我试图应用依赖注入。我知道我可能在这里做错了什么,整个DI事情似乎更令人困惑,可能它是,但我仍然努力让自己的头脑得到解决。依赖注入 - 传递对象

我创建了一个Form类,它将输出各种表单元素,但表单类将至少需要两个其他类(创建为对象)才能正常工作。

下面是我知道了:

$config = new Config(); 
$db = new Database(); 
$html = new HTML(); 

$form = new Form($config, $db, $html); 

这只是我玩弄这样形式可能并不需要所有这些事情,但我用它们来说明这一点。

现在,当我创建表单时,我不想将三个对象传递给它以使用它。我可以用静态方法解决这个问题,但这不是我想要走下去的路。

那么,能够使用Form类中前面创建的三个对象的最佳方法是什么?

我想我在一定程度上想要一个几乎全球性的行为。

我发现了一些关于这个和工厂,IoC容器等的东西,但没有解释清楚和容易,所以任何帮助这将是伟大的。或者甚至是一个易于理解的教程的链接,或者是我自己找不到的东西。

我还发现疙瘩 - 可能像这样的东西沿着正确的线?

回答

3

那么,如果你没有传入三个对象,那么你就没有执行依赖注入。

为了避免再次出现这些参数,您可以编写一个Wrapper类或具有创建和返回表单对象的方法的工厂类。您可以用$config, $db, $html初始化rhe工厂类,然后将其用于创建的每个表单。

所以这个过程是这样的:

$factory= new Factory($config, $db, $html); 
$form= $factory->createForm(); 
+0

所以我会只是创建一个通用工厂类,以及与所有其他类交易?有没有在任何地方容易理解的例子?谢谢! – 0Neji 2013-05-03 13:46:12

+1

如果您有像Form这样的其他类的工厂,并且如果这些不同的工厂都收到了相同的依赖关系,那么您可以只使用一个工厂,并使用createForm方法等几种方法。 – Adder 2013-05-03 14:10:16

+0

有道理,那么我只是传递工厂对象? – 0Neji 2013-05-03 14:55:16