依赖性和实例化

时间:2012-11-17 20:26:27

标签: php oop dependency-injection autoload

我正在尝试将网站的组件移动到类中。例如,下面的代码片段需要在多个文件中使用,但我不想复制和粘贴代码。

<?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()方法。

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

require语句不应该存在,而是自动加载您的依赖项。有一篇关于安东尼费拉拉costs and benefits of autoloading的好博客文章,他总结说,自动加载是最好的解决方案。

其余代码看起来有点像我的bootstrap代码。您创建一个ActionManager的新实例,并通过setter方法注入两个依赖项。如果这确实是依赖关系层次结构顶层的引导代码,则可以使用new。我不喜欢的是显然你的依赖关系是在所需的文件中创建的,而你无法说明你是否已经需要这些实例(懒惰的实例化没有选项)。

根据您的应用程序整体而言,您可能希望使用DIC,但我不太喜欢它们。您可以在没有DIC的情况下进行适当的构造函数注入。实际上,大多数人经常错误地使用DIC并重新创建DI应该反击的问题。

如果您向我们展示更多您的架构,我们可能会就如何处理常见的依赖关系提供更具体的建议。

相关问题