2012-11-17 115 views
1

我正在嘗試將我的網站組件移動到類中。例如下面的代碼片段需要在多個文件中使用,但我不想複製和粘貼代碼。依賴關係和實例化

<?php 
... 
require "ActionManager.php"; 
require "Action.php"; 
require "includes/pdo.php"; 

$actionMan = new ActionManager(); 
$actionMan->setPDO($pdo); 
$actionMan->setUserData($data); 
echo $actionMan->getActions(3); 
?> 

好吧,我知道我可以使用spl_autoload_register()擺脫了前兩個要求,但我想我正在尋找的是某種依賴容器,讓我最終不會重複這個代碼,並且當它改變的時候把自己搞砸了。

另外我發現自己在很多classess中重複setPDO()和setUserData()方法。

有人能指點我在正確的方向嗎?

+0

Symfony有一個很好的獨立依賴注入容器。試着看那裏。 –

+0

您正在重複相同的確切代碼?那麼也許你應該把它抽象成一個函數/類,並只用改變的變量來調用它......? – deceze

回答

1

require語句不應該在那裏,而是自動加載您的依賴關係。有一篇關於安東尼費拉拉的costs and benefits of autoloading的博客文章,他總結道,總體而言,自動加載是最好的解決方案。

其餘的代碼看起來有點像引導代碼給我。您創建一個ActionManager的新實例,並通過setter方法注入兩個依賴關係。如果這確實是您的依賴關係層次結構頂層的引導代碼,那麼可以使用new。我不喜歡的事實是,顯然你的依賴關係是在所需的文件中創建的,而不能說你是否已經需要這些實例(懶惰的實例化沒有選項)。

根據您的應用程序的整體情況,您可能需要考慮使用DIC,但我不太喜歡它們。您可以在沒有DIC的情況下進行適當的構造函數注入。實際上,大多數情況下,人們最終會錯誤地使用DIC,並重新創建DI應該對付的問題。

如果您要向我們展示更多關於您的體系結構,我們可以給出更具體的建議以說明如何處理常見的依賴關係。