2013-05-03 111 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